如何在WPF中将INotifyPropertyChanged数据与DataGrid绑定



在表的动态更新方面确实需要您的帮助。

这里是与INotifyPropertyChanged数据"相关的表;表";并且下面将描述DataContext与主VM相关。通过这种方式,我试图显示在程序执行过程中可能发生变化的表。

这是我的xaml部分:

<DataGrid DataContext="{Binding Table, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" Grid.Column="0" CanUserAddRows="false" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinHeight="500">
<!-- Column Header Text & Bindings -->
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="checkBox" IsThreeState="False" IsChecked="{Binding IsChecked}" CommandParameter="{Binding Index}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header=" Port" Binding="{Binding Port}" MinWidth="70"/>
<DataGridTextColumn Header=" Host" Binding="{Binding Host}" MinWidth="70"/>
<DataGridTextColumn Header=" IPv4" Binding="{Binding IPV4}" MinWidth="70"/>
<DataGridTextColumn Header=" IPv6" Binding="{Binding IPV6}" MinWidth="70"/>
...
</DataGrid.Columns>
</DataGrid>

这就是ViewModel代码(省略号意味着类字段描述中的一些遗漏(:

public class RowVM : ObservableObject
{
private string _port;
private string _host;
private string _ipv4;
private string _ipv6;
...
public string Port
{
get { return _port; }
set 
{ 
_port = value;
OnPropertyChanged("Port");
}
}
...
}
public class MainViewModel : ObservableObject
{
public List<RowVM> Table { get; set; }
public MainViewModel()
{
Table = new List<RowVM>();
}
}

看来一切都有关联。但我根本看不到表中的项目:(也没有例外。

这是我的起始体:

public partial class MainWindow : Window
{
MainViewModel _mainVM = new MainViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = _mainVM;
RowVM row1 = new RowVM() { SN = "001" };
RowVM row2 = new RowVM() { SN = "010" };
_mainVM.Table.Add(row1);
_mainVM.Table.Add(row2);
}

}

请告诉我,我做错了什么?

p.S.INotifyPropertyChanged shell的实现:

public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}

您的窗口不知道何时向Table添加或删除时间。应该使用ObservableCollection<RowVM>而不是List<RowVM>。每当添加或删除某个项时,它都会调用一个事件。这允许GUI元素意识到它们必须更新自己。

相关内容

  • 没有找到相关文章

最新更新