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未使用ObservableCollection更新_C#_Wpf_Datagrid - Fatal编程技术网

C# DataGrid未使用ObservableCollection更新

C# DataGrid未使用ObservableCollection更新,c#,wpf,datagrid,C#,Wpf,Datagrid,我实现了一个DataGrid,如下所示: <DataGrid Name="grdSignals" Grid.Column="1" ItemsSource="{Binding}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Signal Name" Binding="{Binding SignalName}"/>

我实现了一个
DataGrid
,如下所示:

<DataGrid Name="grdSignals" Grid.Column="1" ItemsSource="{Binding}"  AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Signal Name" Binding="{Binding SignalName}"/>
        <DataGridTextColumn Header="Value" Binding="{Binding SignalValue}" />
    </DataGrid.Columns>
</DataGrid>
调试之后,我发现,
ocSignalNames
在其项目发生更改时得到更新。但是这些变化并没有反映在
数据网格中。我正在更新线程中的项目,如下所示:

time.SignalValue = iTest1.ToString();
mode.SignalValue = iTest2.ToString();

我错过了什么

您缺少正确的NotifyChanged处理程序:

    public string SignalName
    {
        get
        {
            return _signalName;
        }
        set
        {
            _signalName = value;
            OnPropertyChanged("SignalName"); //Added
        }
    }

    public string SignalValue
    {
        get
        {
            return _signalValue;
        }
        set
        {
            _signalValue = value;
            OnPropertyChanged("SignalValue"); //NOTE: quotation marks added
        }
    }

您必须使用下面提到的代码

 string _signalName, _signalValue;
    public string SignalName
    {
        get
        {
            return _signalName;
        }
        set
        {
            _signalName = value;
            OnPropertyChanged("SignalName");
        }
    }

    public string SignalValue
    {
        get
        {
            return _signalValue;
        }
        set
        {
            _signalValue = value;
            OnPropertyChanged(SignalValue);
        }
    }
你的XAML看起来像

 <DataGrid Name="grdSignals" Grid.Column="1" ItemsSource="{Binding}"  AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Signal Name" Binding="{Binding SignalName, Mode=TwoWay}"/>
            <DataGridTextColumn Header="Value" Binding="{Binding SignalValue, Mode=TwoWay}" />
        </DataGrid.Columns>
    </DataGrid>

O/p


我不需要更新
SignalName
属性。只有
信号值
。它将在
ObservaleCollection
中更新。您的代码中缺少引号:
OnPropertyChanged(SignalValue)
vs.
OnPropertyChanged(“SignalValue”)
。它将在ObservaleCollection中更新。这在这里是无关紧要的。。。通知
PropertyChanged
更改事件将更新UI,而您当前似乎没有这样做。好的,我知道了!我不认为这是个问题。如果属性不是字符串类型,我可能不会在这里问问题。感谢大家的快速响应。可观测集合只通知集合中的更改,不是关于集合中项目的更改。是线程
UIThread
还是
NonUIThread
?从NonUIThread调用Dispatcher来更新UI中的值。这里与我发布的答案有什么不同?OP评论说它不起作用,所以我在ans中向他显示了一个完整的路径和输出
 <DataGrid Name="grdSignals" Grid.Column="1" ItemsSource="{Binding}"  AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Signal Name" Binding="{Binding SignalName, Mode=TwoWay}"/>
            <DataGridTextColumn Header="Value" Binding="{Binding SignalValue, Mode=TwoWay}" />
        </DataGrid.Columns>
    </DataGrid>