Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 值更改时未激发Datagrid datatrigger_C#_Wpf_Data Binding_Datagrid_Datatrigger - Fatal编程技术网

C# 值更改时未激发Datagrid datatrigger

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,其中的列绑定到数据表中的某些列

<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的方括号也无济于事