none
WPF绑定数组的问题 RRS feed

  • 问题

  • 假如classA有个数组如下,这个数组在后台跟另外一个对象通信,也就是说会不停且不定时的变化(根据通信结果而定)

    public static bool[] b = new bool[100];

    假如我想自定义一个label控件,我想在label控件上设定一个属性i,控件的Text根据classA.b[i]的值实时变化,当然变化的内容可以实现设好。

    请问该如何做,前台后台的代码多如何写?我希望数据有后台处理,绑定的工作做在前台,比如{binding xxx}这样傻瓜式就解决问题。当然后台的xxx可以按照特定的要求做好。

    用winform我是这么做的,也工作的很好,wpf不知道该如何绑定?

    1,在classA检测数组b的变化然后触发一个事件

    2,在自定义label控件里订阅classA的事件,订阅方法就很简单

    label.Text=(classA.b[i])?text1:text2;



    2018年9月13日 7:00

答案

  • 有两个办法。一是如果你的数组长度是固定的,那么你可以把数组元素第定义为一个类并实现INotifyPropertyChanged接口,像版主说的一样。另一个更简单的办法是使用ObservableCollection类,位于System.Collections.ObjectModel名称空间。

    关于INotifyPropertyChanged:https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.inotifypropertychanged?redirectedfrom=MSDN&view=netframework-4.7.2

    关于ObservableCollection:https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.objectmodel.observablecollection-1?view=netframework-4.7.2

    学习.NET,推荐下载离线MSDN文档,文档中有支持你成为资深.NET程序员所需的全部内容,使用帮助文档使你解决问题更有效率。当不知道如何搜索问题时再来提问,我认为这是比较合理学习方式

    2018年9月16日 15:14

全部回复

  • 参考:https://www.cnblogs.com/zzw1986/p/7583534.html

    family as water

    2018年9月14日 1:02
  • 谢谢,这篇博文看过,不过没有我想要的内容和方法。
    2018年9月14日 2:29
  • 你好,

    可以写一个类来实现INotifyPropertyChanged 接口。 然后绑定就可以了,只要B变化了,WPF前端也会改变。

    public class Test : INotifyPropertyChanged
        {
            private bool[] _b;
            public bool[] B
            {
                get { return _b; }
                set { 
                     _b= value; 
                     OnPropertyChanged("B");
                   }
            }
     
            public event PropertyChangedEventHandler PropertyChanged;
            protected void OnPropertyChanged(string propertyName = "")
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if (handler != null)
                {
                    handler(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
        public Test ()
        {
            B= new bool[100];
        }
    
     }

    纤细内容,请参考:


    https://www.cnblogs.com/TianFang/p/6240933.html

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.



    2018年9月14日 7:37
    版主
  • 谢谢版主,看的不是很明白,似乎版主这个只能绑定整个数组,而不是我需要的某个数组元素而已。

    如果只是要绑定数组中的某个元素B[xxx],那么前台的代码怎么写?比如前台有个名为ChkBox1的CheckBox,IsChecked要绑定test.B[xx],那么要怎么绑定?



    2018年9月16日 12:18
  • 有两个办法。一是如果你的数组长度是固定的,那么你可以把数组元素第定义为一个类并实现INotifyPropertyChanged接口,像版主说的一样。另一个更简单的办法是使用ObservableCollection类,位于System.Collections.ObjectModel名称空间。

    关于INotifyPropertyChanged:https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.inotifypropertychanged?redirectedfrom=MSDN&view=netframework-4.7.2

    关于ObservableCollection:https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.objectmodel.observablecollection-1?view=netframework-4.7.2

    学习.NET,推荐下载离线MSDN文档,文档中有支持你成为资深.NET程序员所需的全部内容,使用帮助文档使你解决问题更有效率。当不知道如何搜索问题时再来提问,我认为这是比较合理学习方式

    2018年9月16日 15:14