积极答复者
WPF绑定数组的问题

问题
-
假如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日 8:26
答案
-
有两个办法。一是如果你的数组长度是固定的,那么你可以把数组元素第定义为一个类并实现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程序员所需的全部内容,使用帮助文档使你解决问题更有效率。当不知道如何搜索问题时再来提问,我认为这是比较合理学习方式
- 已标记为答案 冬日厦语 2019年1月16日 11: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.
- 已编辑 Zhanglong WuMicrosoft contingent staff, Moderator 2018年9月14日 7:40
-
有两个办法。一是如果你的数组长度是固定的,那么你可以把数组元素第定义为一个类并实现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程序员所需的全部内容,使用帮助文档使你解决问题更有效率。当不知道如何搜索问题时再来提问,我认为这是比较合理学习方式
- 已标记为答案 冬日厦语 2019年1月16日 11:29