Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我在ObservableCollection中使用数组值进行绑定吗?_C#_Arrays_Binding - Fatal编程技术网

C# 为什么可以';我在ObservableCollection中使用数组值进行绑定吗?

C# 为什么可以';我在ObservableCollection中使用数组值进行绑定吗?,c#,arrays,binding,C#,Arrays,Binding,我想显示一些字节值及其二进制值。如下所示: 我的编码: 这是项目来源: public MainWindow() { InitializeComponent(); ObservableCollection<MyRegs> regs = new ObservableCollection<MyRegs>() { new MyRegs(0x12), new MyRegs(0x

我想显示一些字节值及其二进制值。如下所示:

我的编码: 这是项目来源:

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 type而不是bool[]type,它会工作。

首先,您的
MyRegs
类没有实现INotifyPropertyChanged,因此您的UI元素无法知道值何时发生更改。必须在类上实现该接口,并在相应的setter中调用
notifyPropertyChanged


其次,ObservableCollection仅在向集合中添加或删除项时发送更新通知,而不是在更新项的属性时发送更新通知。

首先,您的
MyRegs
类没有实现INotifyPropertyChanged,因此您的UI元素无法知道值何时发生更改。必须在类上实现该接口,并在相应的setter中调用
notifyPropertyChanged


其次,ObservableCollection仅在向集合中添加项或从集合中删除项时发送更新通知,而不是在更新项的属性时发送更新通知。

绑定列表可以同时执行这两项操作,inser/delete和modify notificationsBindingList是为WinForms设计的,WPF不适当支持。请参阅:首先,我认为NotifyPropertyChanged与Set访问器无关。事实上,在编辑文本框时可以设置RegValue。其次,ObservableCollection仅在集合中添加或删除项目时发送更新通知,当项目的属性被更新时就不会了。----我同意。回到我的问题,当我检查那些复选框时,它不会转到Setter。如何解释这一点,可能绑定不起作用。我如何修复它。绑定列表两者都可以,inser/delete and modify notificationsBindingList是为WinForms设计的,WPF不支持它。请参阅:首先,我认为NotifyPropertyChanged与Set访问器无关。事实上,在编辑文本框时可以设置RegValue。其次,ObservableCollection仅在集合中添加或删除项目时发送更新通知,当项目的属性被更新时不会。----我同意。回到我的问题,当我检查那些复选框时,它不会转到Setter。如何解释这一点,可能绑定不起作用。我如何修复它。