[英]Why can't I use array value in a ObservableCollection for binding?
我想显示一些字节值和它们的二进制值。像这样:我的 UI 。
我的编码:这是项目来源:
public MainWindow()
{
InitializeComponent();
ObservableCollection<MyRegs> regs = new ObservableCollection<MyRegs>()
{
new MyRegs(0x12),
new MyRegs(0x23),
new MyRegs(0x34)
};
RegsList.ItemsSource = regs;
}
这是自定义数据:
public class MyRegs
{
public MyRegs(byte val)
{
this.RegValue = val;
this.Bits = new bool[] { true, false, true, false, true, false, true, false };
}
private byte regValue;
public byte RegValue
{
get { return regValue; }
set
{
regValue = value;
}
}
private bool[] bits;
public bool[] Bits
{
get
{
return bits;
}
set
{
bits = value;
}
}
}
Xaml:顺便问一下,我可以使用模板来获取这些复选框吗
<Grid>
<ListView x:Name="RegsList">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Path=RegValue,Mode=TwoWay, Converter={StaticResource sResource1}}" HorizontalAlignment="Left" TextWrapping="Wrap"/>
<CheckBox IsChecked="{Binding Path=Bits[7],Mode=TwoWay}"/>
<CheckBox IsChecked="{Binding Path=Bits[6],Mode=TwoWay}"/>
<CheckBox IsChecked="{Binding Path=Bits[5],Mode=TwoWay}"/>
<CheckBox IsChecked="{Binding Path=Bits[4],Mode=TwoWay}"/>
<CheckBox IsChecked="{Binding Path=Bits[3],Mode=TwoWay}"/>
<CheckBox IsChecked="{Binding Path=Bits[2],Mode=TwoWay}"/>
<CheckBox IsChecked="{Binding Path=Bits[1],Mode=TwoWay}"/>
<CheckBox IsChecked="{Binding Path=Bits[0],Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
但是当我检查复选框时,它没有设置位值。为什么???
我已经使用了 ObservableCollection,它也没有用。
如果我使用 bool 类型而不是 bool[] 类型,它可以工作。
首先,您的MyRegs
class 没有实现 INotifyPropertyChanged,因此您的 UI 元素无法知道您的值何时更改。 您必须在 class 上实现该接口,并在适当的设置器中调用NotifyPropetyChanged
。
其次,ObservableCollection 仅在从集合中添加或删除项目时发送更新通知,而不是在项目的属性已更新时发送更新通知。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.