Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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# 可观察集合项属性已更改_C#_.net_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 可观察集合项属性已更改

C# 可观察集合项属性已更改,c#,.net,wpf,xaml,mvvm,C#,.net,Wpf,Xaml,Mvvm,我有一个column类,它使用视图模型库来实现INotifyPropertyChanged(我知道): 然后是列列表: public class Columns : ObservableCollection<Column> { } 当我通过项上的复选框更改匿名属性时,如何使视图模型中的Columns属性更改以反映这一点?您的Column类需要实现INotifyPropertyChanged(您说是这样的)。当Anonymize的值更改时,您还需要引发该事件。如果您只想从UI更改

我有一个column类,它使用视图模型库来实现
INotifyPropertyChanged
(我知道):

然后是列列表:

public class Columns : ObservableCollection<Column>
{
}


当我通过项上的复选框更改匿名属性时,如何使视图模型中的Columns属性更改以反映这一点?

您的
Column
类需要实现
INotifyPropertyChanged
(您说是这样的)。当
Anonymize
的值更改时,您还需要引发该事件。如果您只想从UI更改
Anonymize
属性,则操作完成。如果希望在UI上查看更改(从后端),则必须在
类中实现
INotifyPropertyChanged
接口

public class Column : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public string columnName;
    public bool anonymize;

    public string ColumnName
    {
        get { return columnName; }
        set
        {
            columnName = value; RaiseOnPropertyChanged("ColumnName");
        }
    }
    public bool Anonymize
    {
        get { return anonymize; }
        set { anonymize = value; RaiseOnPropertyChanged("Anonymize"); }
    }

    public void RaiseOnPropertyChanged(string propertyName)
    {
        var eh = PropertyChanged;
        if (eh != null)
            eh(this, new PropertyChangedEventArgs(propertyName));
    }
}

当“匿名化”状态更改时,需要通知视图模型需要修改列集合。我以前解决这个问题的方法是向列类中添加一个CheckChanged事件,该事件在
匿名化时引发。视图模型在创建Column对象后会订阅该事件,但会将其添加到
Columns
集合中。当提出CheckChanged时,视图模型会从Columns集合中添加/删除该项。

您是否尝试过双向绑定模式?视图模型中的Columns属性到底是什么?我只能看到类型为
Columns
TableColumns
属性。您想更改该属性,还是想更改当前
对象的
匿名化
属性?+1但问题是“当我更改匿名化属性(例如,在代码中)时,如何使视图反映此更改?”。有人反过来问我,我一点也不明白。嗯,你说得对——我可能完全没有抓住要点!也就是说,如果这是OP所需要的,那么我不确定为什么发布的标记不起作用。困惑的嗯,我不能说今天是星期五吗。这个问题太愚蠢了,甚至我都不知道我为什么问它,我现在有我需要的了,非常感谢。这正是以前得到的答案。
private Columns _tableColumns;
public Columns TableColumns
{
  get
  {
    return _tableColumns;
  }
  set
  {
    _tableColumns = value;
    OnPropertyChanged("TableColumns");
  }
}
  <ComboBox Name="cbColumns" ItemsSource="{Binding TableColumns}">
    <ComboBox.ItemTemplate>
      <DataTemplate>
        <StackPanel Orientation="Horizontal">
          <CheckBox  IsChecked="{Binding Anonymize, Mode=TwoWay}" />
          <TextBlock Text="{Binding ColumnName}"/>
        </StackPanel>
      </DataTemplate>
    </ComboBox.ItemTemplate>
  </ComboBox>
public class Column : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public string columnName;
    public bool anonymize;

    public string ColumnName
    {
        get { return columnName; }
        set
        {
            columnName = value; RaiseOnPropertyChanged("ColumnName");
        }
    }
    public bool Anonymize
    {
        get { return anonymize; }
        set { anonymize = value; RaiseOnPropertyChanged("Anonymize"); }
    }

    public void RaiseOnPropertyChanged(string propertyName)
    {
        var eh = PropertyChanged;
        if (eh != null)
            eh(this, new PropertyChangedEventArgs(propertyName));
    }
}