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>