首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可观察的集合项属性已更改

可观察的集合项属性已更改
EN

Stack Overflow用户
提问于 2012-08-03 19:05:45
回答 3查看 2.8K关注 0票数 1

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

代码语言:javascript
复制
public class Column : ViewModelBase
{
    public string ColumnName { get; set; }
    public bool Anonymize { get; set; }
}

然后是列的列表:

代码语言:javascript
复制
public class Columns : ObservableCollection<Column>
{
}

在我的视图模型中,我有一个属性列,我将它绑定到一个带有复选框和文本块的组合框:

代码语言:javascript
复制
private Columns _tableColumns;
public Columns TableColumns
{
  get
  {
    return _tableColumns;
  }
  set
  {
    _tableColumns = value;
    OnPropertyChanged("TableColumns");
  }
}
代码语言:javascript
复制
  <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>

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-03 19:14:20

您的Column类需要实现INotifyPropertyChanged (您说它实现了)。您还需要在Anonymize的值发生更改时引发该事件(您没有这样做)。

票数 3
EN

Stack Overflow用户

发布于 2012-08-03 19:22:02

如果只想在UI中更改Anonymize属性,则可以完成此操作。如果您希望看到UI上的更改(来自后端),则必须在Column类中实现INotifyPropertyChanged接口。

代码语言:javascript
复制
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));
    }
}
票数 0
EN

Stack Overflow用户

发布于 2012-08-03 21:11:19

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11794498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档