c# - WPF Datagrid 不更新
问题描述
关于我绑定到 ObservableCollection 的 WPF 数据网格,我有一个(很可能)非常简单的问题,不幸的是,当我将项目添加到此集合时它不会更新。
这是我的观点,包括。数据网格:
<UserControl.Resources>
<local:SinglePackTransactions_ViewModel x:Key="vm"/>
</UserControl.Resources>
...
...
...
<DataGrid x:Name="DataGridRequestPacks_SinglePack" AutoGenerateColumns="False" Grid.Row="1" Width="700" Margin="30"
ItemsSource="{Binding SinglePackResultList, Source={StaticResource vm}}" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Created" Width="Auto" Binding="{Binding Created}"/>
<DataGridTextColumn Header="Product Code" Width="Auto" Binding="{Binding ProductCode}"/>
</DataGrid.Columns>
</DataGrid>
当我单击一个按钮 (Command="SendRequestCmd") 时,我将我的自定义类 ("Pack") 的一项添加到我的 ObservableCollection SinglePackResultList。在我的 ViewModel 的构造函数中,我在这里有这个:
SinglePackResultList = new ObservableCollection<Pack>();
SendRequestCmd = new RelayCommand((object z) =>
{
try
{
SinglePackResultList.Add(SOAPRequest.SOAPRequestHandler(new Pack() {Created = (DateTime.Now).ToShortDateString(), ProductCode = ProductCode_SinglePack, BatchID = BatchID_SinglePack, BatchExpiry = BatchExpiry_SinglePack, PackSerialnumber = SerialNumber_SinglePack, PackTransaction = Transaction_SinglePack.TransactionID }));
}
catch (Exception)
{
return;
}
},
CanExecute);
当我设置调试点时,我可以看到在每次单击按钮后,我的 ObservableCollection SinglePackResultList 中都会有其他项目 - 所以这有效。但不幸的是,Datagrid 保持为空。我尝试在NotifyPropertyChanged("SinglePackResultList")
之后直接添加一个SinglePackResultList.Add(...)
,但这也不起作用。
我完全迷失了如何让这个工作。:-(
解决方案
在 WPF 中处理数据绑定的两种方法。
在构造函数中创建并且永远不要更改它。例如
public class A{
public ObservableCollection<int> ObserableList { get; set; }
public A() { ObservableList = new ObservableCollection<int>(); }
}
那么您只需添加或删除集合中的元素。
或者您可以使用完整的属性和事件PropertyChanged,这样您就可以为其分配另一个集合。
public class A {
private ObservableCollection<int> observableList;
public ObservableCollection<int> ObservableList
{
get { return observableList; }
set
{
observableList = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ObservableList));
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void Init()
{
ObservableList = new ObservableCollection<int>();
}
}
推荐阅读
- python - Datashader直方图一条线
- r - R ggplot2中条形图上标签位置的问题
- c++ - 使用 PortAudio 和 libsndfile 播放 .Wav 文件 c++ 获取 ALSA 错误
- matlab - 使用 fread 时出错 无效的文件标识符。使用 fopen 生成有效的文件标识符
- linux - 使用 nix-shell 或 nix shell 在 Linux 64 上运行 MacOS sed
- sql - 如何使列等于计算值
- javascript - 用文本文件中的日期替换 HTML 文本
- vtk - 解析二进制VTK
- python - 组合框没有正确调整大小以适应更大的字体大小
- skype - 为商务活动捕获 Skype