【发布时间】:2016-02-06 11:31:09
【问题描述】:
我有一个 dataGrid,其列绑定到数据表中的某些列
<DataGrid x:Name="WatchersGrid" ItemsSource="{Binding GroupWatchers}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedItem}" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=[Name]}"/>
<DataGridTextColumn Header="Value" Binding="{Binding Path=[Value]}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="InRange" Binding="{Binding [IsInRange]}"/>
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding [IsInRange]}" Value="False">
<Setter Property="Foreground" Value="Crimson"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
我在“IsInRange”列上有一个数据触发器,如果值为 false,它将前景属性设置为红色。 数据网格列内的值会发生变化,但颜色属性会发生变化。 我试图 NotifyPropertyChanged("[IsInRange]");当我的价值发生变化但没有帮助时 有什么想法吗?
编辑: 我的视图模型
public class WatcherControlViewModel : INotifyPropertyChanged
{
private DataTable _dt;
private string _groupName;
public DataRow[] GroupWatchers{get {return _dt.Select("Group = '" + GroupName + "'");}}
public WatcherControlViewModel(DataTable dt, string name)
{
_dt = dt;
_groupName = name;
_dt.RowChanged += DataTableChangedEvent;
}
private void DataTableChangedEvent(object sender, DataRowChangeEventArgs e)
{
NotifyPropertyChanged("GroupWatchers");
NotifyPropertyChanged("IsInRange");
}
}
谢谢
【问题讨论】:
-
实际上,它对我有用....请告诉你
ViewModelclass。 -
当我第一次添加值时它对我有用,但是如果我更改数据表中的值它不会更新,在我的视图模型中我有 'public DataRow[] GroupWatchers{get {返回 _dt.Select("Group = '" + GroupName + "'");}}' 这是 itemsource 并且我更改了代码中的一些 _dt 值。在我改变后,我提出' NotifyPropertyChanged("GroupWatchers"); NotifyPropertyChanged("[IsInRange]");'
-
你不需要
INotifyPropertyChanged和GroupWatchers应该是公共的DataTable属性,get和set,而不是DataRow[]。请在我的帖子中查看如何操作。 -
对不起,我忘了我在 get 中对 dt 进行了选择,我不想只显示具有相同组名的整个 dt
-
您的自定义类只需要
INotifyPropertyChanged。DataTable已经足够“聪明”了。
标签: c# wpf data-binding datagrid datatrigger