use*_*750 5 wpf datagrid propertychanged
我有一个像这样的 ObservableCollection,
ObservableCollection<Item> Found_Items = new ObservableCollection<Item>();
public struct Item
{
public bool Enabled { get; set; }
public BitmapImage ItemIcon { get; set; }
public string Path { get; set; }
public string Size { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在像这样设置 Datagrid 的 itemsource,
FoundItemsDatagrid.ItemsSource = Found_Items;
Run Code Online (Sandbox Code Playgroud)
我在 Datagrid 中有一个这样的复选框,
<DataGridTemplateColumn Header="Path" Width="*" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DockPanel>
<CheckBox IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DockPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
我想,每当我选中或取消选中 datagrid 上的复选框时,它都应该更新我的 ObservableCollection。
什么是最简单的方法来做到这一点?
谢谢..
问题在于你如何绑定到你的集合。您正在显式设置 ItemsSource,因此 ObservableCollection 将不会按照您希望的方式工作。
而是像这样使用绑定:
<DataGridTemplateColumn Header="Path" Width="*" ItemsSource="{Binding Found_Items}" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DockPanel>
<CheckBox IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DockPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
然后确保您在后台执行此操作:
public ObservableCollection<Item> Found_Items {get; set;}
Run Code Online (Sandbox Code Playgroud)
为了反映每个项目的更改,您需要使用 INotifyPropertyChanged,如下所示:
public class Item : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool enabled;
private BitmapImage itemIcon;
private string path;
private string size;
public string Size
{
get { return size; }
set
{
size = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Size"));
}
}
public string Path
{
get { return path; }
set
{
path = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Path"));
}
}
public BitmapImage ItemIcon
{
get { return itemIcon; }
set
{
itemIcon = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("ItemIcon"));
}
}
public bool Enabled
{
get { return enabled; }
set
{
enabled = value;
if(PropertyChanged!=null) PropertyChanged(this,new PropertyChangedEventArgs("Enabled"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当用户更改某个项目时,可以在 ObservableCollection 中看到更改。这要归功于 INotifyPropertyChanged。
| 归档时间: |
|
| 查看次数: |
4710 次 |
| 最近记录: |