首先,这是我第一次尝试使用WPF。我会尝试尽可能多地提供信息,因为这种数据输入形式比典型的要少一些。但是,如果需要更多信息,请询问。
我的CollectionViewSource
集合中有一系列Window.Resources
个对象的WPF窗口。这些是在我的窗口构造函数中初始化的。
其中一个集合是IList<T>
,其中T
是与实体框架一起使用的POCO类型。
我的表单有一部分用户输入控件。当用户点击Save
按钮时,我需要创建一个实体并将其添加到我的IList
集合中。
到目前为止,我没有遇到任何麻烦。我可以创建实体,我可以毫无问题地将它添加到集合中。但是,问题是我有一个绑定到此集合的ListView
控件。我可以并且已经验证,当Window在构造函数中初始化时,我可以将记录加载到此列表中。但是,当我单击Save
按钮时,集合会更新,但UI不会刷新操作。
供参考,以下是相关代码。
SetResource() - 在我的窗口的构造函数中调用
private void SetResources()
{
... other objects...
//myCacheSrc is property defined in my Window.cs file.
myCacheSrc = (CollectionViewSource)FindResource("myCacheSrc");
myCacheSrc.Source = new List<MyEFPOCO>();
... more initializations of other objects.
}
我的保存按钮点击事件的内容
private void Save_Click(object sender, RoutedEventArgs e)
{
var cache = myCacheSrc.Source as List<MyEFPOCO>;
if (cache != null && !CurrentRecord.Equals(origCurrentRecord))
{
cache.Add(CurrentRecord);
}
}
值得一提的是,我已经逐步完成了上面的代码块。它正在执行save事件,CurrentRecord
属性确实包含有效实体。
这是我的Window构造函数。请注意,存在测试插入操作。这有效!请注意,它与我的按钮事件中的代码没有太大区别。为什么会这样,而不是按钮事件?
窗口构造函数
public MyWindow()
{
InitializeComponent();
SetResources();
//TEST
var cache = myCacheSrc.Source as List<MyEFPOCO>;
if (cache != null)
{
cache.Add(new MyEFPOCO
{
userEntryType = "TEST",
numberValue= 1234567
});
}
}
MyWindow.xaml - 有问题的ListView声明
<ListView Name="CachedChangesList" ItemsSource="{Binding Source={StaticResource myCacheSrc}}">
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel>
<Button Name="UpdateChange" Content="{StaticResource iUpdate}" Width="20" />
<Button Name="DeleteChange" Content="{StaticResource iDelete}" Width="20" />
<Label Content="{Binding userEntryType}" />
<Label Content="{Binding numberValue}" />
</DockPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
答案 0 :(得分:2)
使用ObservableCollection而不是List,因为它会通知UI有关源更改的信息。 https://msdn.microsoft.com/en-us/library/ms668604(v=vs.110).aspx
myCacheSrc = (CollectionViewSource)FindResource("myCacheSrc");
myCacheSrc.Source = new ObservableCollection<MyEFPOCO>();