我有一个列类,它使用视图模型库来实现INotifyPropertyChanged (懒惰,我知道):
public class Column : ViewModelBase
{
public string ColumnName { get; set; }
public bool Anonymize { get; set; }
}然后是列的列表:
public class Columns : ObservableCollection<Column>
{
}在我的视图模型中,我有一个属性列,我将它绑定到一个带有复选框和文本块的组合框:
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>当我通过项目上的复选框更改匿名属性时,如何使视图模型中的列属性更改以反映这一点?
发布于 2012-08-03 19:14:20
您的Column类需要实现INotifyPropertyChanged (您说它实现了)。您还需要在Anonymize的值发生更改时引发该事件(您没有这样做)。
发布于 2012-08-03 19:22:02
如果只想在UI中更改Anonymize属性,则可以完成此操作。如果您希望看到UI上的更改(来自后端),则必须在Column类中实现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));
}
}发布于 2012-08-03 21:11:19
当Anonymize状态改变时,它需要通知视图模型它需要修改列的集合。我以前解决这个问题的方法是向Anonymize时引发的Column类添加一个CheckChanged事件。视图模型在创建Column对象后订阅事件,但将其添加到Columns集合中。当引发CheckChanged时,视图模型会在Columns集合中添加/删除该项。
https://stackoverflow.com/questions/11794498
复制相似问题