C# 值更改时未激发Datagrid datatrigger
我有一个DataGrid,其中的列绑定到数据表中的某些列C# 值更改时未激发Datagrid datatrigger,c#,wpf,data-binding,datagrid,datatrigger,C#,Wpf,Data Binding,Datagrid,Datatrigger,我有一个DataGrid,其中的列绑定到数据表中的某些列 <DataGrid x:Name="WatchersGrid" ItemsSource="{Binding GroupWatchers}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedItem}" > <DataGrid.Columns> <DataGridTextColumn H
<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>
谢谢您尝试过不使用方括号吗?您的模型是否实现INotifyPropertyChanged接口?
如果您在该视图后面发布代码,可能会有所帮助。您尝试过不使用方括号吗?您的模型是否实现INotifyPropertyChanged接口?
如果您在该视图后面发布代码,可能会有所帮助。这实际上取决于您的
视图模型以及如何绑定到它。从XAML来看,您的ViewModel
应该如下所示:
public class MyViewModel
{
public DataTable WatchersGrid { get; set; }
public MyViewModel()
{
WatchersGrid = new MyDataTable();
}
}
public partial class Window1 : Window
{
private MyViewModel vm;
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
vm = new MyViewModel();
DataContext = vm;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
vm.WatchersGrid.Rows[0]["IsInRange"] = !(bool)vm.WatchersGrid.Rows[0]["IsInRange"];
}
}
您的绑定应该如下所示:
public class MyViewModel
{
public DataTable WatchersGrid { get; set; }
public MyViewModel()
{
WatchersGrid = new MyDataTable();
}
}
public partial class Window1 : Window
{
private MyViewModel vm;
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
vm = new MyViewModel();
DataContext = vm;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
vm.WatchersGrid.Rows[0]["IsInRange"] = !(bool)vm.WatchersGrid.Rows[0]["IsInRange"];
}
}
注意测试按钮。它在true
和false
之间切换IsInRange
值,仅用于第一行,用于测试目的
结果是:
这实际上取决于您的ViewModel
以及如何绑定到它。从XAML来看,您的ViewModel
应该如下所示:
public class MyViewModel
{
public DataTable WatchersGrid { get; set; }
public MyViewModel()
{
WatchersGrid = new MyDataTable();
}
}
public partial class Window1 : Window
{
private MyViewModel vm;
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
vm = new MyViewModel();
DataContext = vm;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
vm.WatchersGrid.Rows[0]["IsInRange"] = !(bool)vm.WatchersGrid.Rows[0]["IsInRange"];
}
}
您的绑定应该如下所示:
public class MyViewModel
{
public DataTable WatchersGrid { get; set; }
public MyViewModel()
{
WatchersGrid = new MyDataTable();
}
}
public partial class Window1 : Window
{
private MyViewModel vm;
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
vm = new MyViewModel();
DataContext = vm;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
vm.WatchersGrid.Rows[0]["IsInRange"] = !(bool)vm.WatchersGrid.Rows[0]["IsInRange"];
}
}
注意测试按钮。它在true
和false
之间切换IsInRange
值,仅用于第一行,用于测试目的
结果是:
事实上,这对我很有效。。。。请向您展示ViewModel
class。当我第一次添加值时,它对我有效,但如果我更改数据表中的值,它不会更新,在我的ViewModel中,我有“public DataRow[]GroupWatchers{get{return}dt.Select(“Group=”+GroupName+“”);}”,这是itemsource,我更改了代码中的一些{dt值。在我改变后,我提出“NotifyPropertyChanged”(“GroupWatchers”);NotifyPropertyChanged(“[IsInRange]”;'您不需要INotifyPropertyChanged
和GroupWatchers
应该是一个公共DataTable
属性,具有get
和set
,而不是DataRow[]
。请在我的帖子中查看如何操作。对不起,我忘记了我在get中对dt进行了选择,我不想显示整个dt,只是显示具有相同组名的实体。您只需要为自定义类更改INotifyPropertyChanged
DataTable
已经足够“聪明”达到这个目的了。实际上,它对我很有用。。。。请向您展示ViewModel
class。当我第一次添加值时,它对我有效,但如果我更改数据表中的值,它不会更新,在我的ViewModel中,我有“public DataRow[]GroupWatchers{get{return}dt.Select(“Group=”+GroupName+“”);}”,这是itemsource,我更改了代码中的一些{dt值。在我改变后,我提出“NotifyPropertyChanged”(“GroupWatchers”);NotifyPropertyChanged(“[IsInRange]”;'您不需要INotifyPropertyChanged
和GroupWatchers
应该是一个公共DataTable
属性,具有get
和set
,而不是DataRow[]
。请在我的帖子中查看如何操作。对不起,我忘记了我在get中对dt进行了选择,我不想显示整个dt,只是显示具有相同组名的实体。您只需要为自定义类更改INotifyPropertyChanged
DataTable
已经足够“智能”了。是的,我的viewmodel在代码中实现了INotifyPropertyChanged,在我更改数据表的值时,行[“IsInRange”]=false;在某些数据行中。删除方括号@yogeryes没有任何帮助。我的viewmodel实现了代码中的INotifyPropertyChanged,我更改了数据表的值,行[“IsInRange”]=false;在某些数据行中。删除yoger的方括号也无济于事