none
数组变量的双向Binding RRS feed

  • 问题

  • 我有一个数组变量,bool[] Bit.

    我还有一组Checkbox,每一个CheckBoxBinding Bit中一个元素,双向Binding。

    <CheckBox x:Name="TestCheckBox" IsChecked="{Binding Path=Bit[0],Mode=TwoWay}"/>
    private bool[] bit;
    
            public bool[] Bit
            {
                get
                {
                    return bit;
                }
                set
                {
                    bit = value;
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Bit"));
                }
            }

    source→target是OK的,改变bit的值,CheckBox也会做相应改变。

    但是,target→source的时候是不工作的,为什么???

    好,你应该会推荐我使用ObservableCollection。。。但是可以先解释一下为什么上面的方式不可以吗?

    另外,我不想使用ObservableCollection,具体原因另外开贴


    2019年11月19日 4:30

全部回复

  • Hi,

    你这边数组应该给个初始值,这样:

     private bool[] bit = new bool[10];

    我测试过了,这样是双向变化的,测试代码:

     <StackPanel>
            <CheckBox x:Name="TestCheckBox" IsChecked="{Binding Path=Bit[0],Mode=TwoWay}"/>
            <Button Content="btn1" Name="btn1" Click="btn1_Click"/>
        </StackPanel>
     public partial class MainWindow : Window
        {
           MyTest mt= new MyTest();
            public MainWindow()
            {
                InitializeComponent();
    
                this.DataContext = mt;
            }
    
            private void btn1_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show(mt.Bit[0].ToString());
            }
        }

    Best Regards,

    Alex


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。



    2019年11月19日 7:36
    版主
  • hi,Alex

    我好像找到了原因,应该不是初始话的问题。

    我验证的时候是在Set访问器处打的断点。。。。我以为勾选CheckBox的时候会重新Set我绑定的值,实际并没有跳到我断点的地方我就以为值没有发送变化,看来是我理解错了。

    现在我用按钮打印了我绑定的值,发现其实是有变化的。

    应该是绑定的数据只是其中的一个元素,所以没有调用set,但实际改元素值发生了变化。

    那么问题来了,我有什么办法可以知道某个元素发生了变化?

    非常感谢

    2019年11月19日 8:58
  • Hi,

    不太理解你说的,但是我修改你的代码之后应该可以双向绑定,你不是要这样的效果?

    Best Regards,

    Alex


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。



    2019年11月19日 9:06
    版主
  • 我一直set访问器处打断点来判断Bits的值是否发生了变化(上面代码已有改动,但大体差不多)。

    这个验证方式是不对的。因为Bits中某一个元素发生变化的时候并没有调用set访问器。

    2019年11月19日 9:18
  • Hi,

    你已经解决了问题?如果是的话,请分享一下。

    Best Regards,

    Alex


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。



    2019年11月27日 8:45
    版主