【发布时间】:2018-12-03 06:06:43
【问题描述】:
我有一个(很可能)非常简单的问题,关于我绑定到 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 保持为空。我尝试在SinglePackResultList.Add(...) 之后直接添加NotifyPropertyChanged("SinglePackResultList"),但效果不佳。
我完全不知道如何让它工作。 :-(
【问题讨论】:
-
使其成为属性而不是字段。
-
我有点迷路了。我现在从构造函数中删除了
SinglePackResultList = new ObservableCollection<Pack>();。我的内部领域。我的财产看起来像这样:private ObservableCollection<Pack> _singlePackResultList; public ObservableCollection<Pack> SinglePackResultList { get { if (_singlePackResultList == null) _singlePackResultList = new ObservableCollection<Pack>(); return _singlePackResultList; } set { _singlePackResultList = value; } }我到底需要改变什么? :-) -
您应该发布您的确切代码,因为它很重要。 Wpf 绑定通常只适用于属性。
-
您是否正在创建视图模型的单个实例?
-
大家好,感谢您的大力支持。这个问题已经解决了(见下面我的回答)。我的主要错误是,我没有在 View-constructor 中将 ViewModel 分配给我的 View 的 DataContext。
标签: c# wpf datagrid wpfdatagrid inotifypropertychanged