使用 WPF、MVVM。我有一个控件 ModifyZooControl,它是一个 UserControl。这是一个控件,因为我想将它添加到多个窗口。
其中一个窗口是 ModifyZooWindow,它从 MVVMLight 获取 DataContext。我在窗口的 xaml 中添加用户控件:
<uc:ModifyZooControl/>
ModifyZooControl 有这个,用于列出 Zoo 实例的 ObservableCollection<Animal> Animals
属性:
<ListBox Name="Animals" ItemsSource="{Binding Animals}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
到目前为止,这有效,我有窗口,其中的 ModifyZooControl 列出了动物。
接下来,我想从控件的代码隐藏中修改动物列表。我怎么做?
Animals.Items.Add(newAnimal)
不起作用,因为“使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素”。
如何从 UserControl 的代码隐藏中获取原始视图模型 Animals observablecollection?
据我了解,一种选择是将 ObservableCollections 的两个属性添加到 UserControl。并在从 Window 实例化 UserControl 时设置它们的值。然后我会引用原始的 ObservableCollections,并可以修改它们。但是,考虑到已经通过 Window 的 datacontext 对集合进行了某种引用,这真的需要吗?
另外,UserControl 是这种事情的正确选择吗?我应该使用框架还是其他东西?