使用WPF,MVVM。我有一個控件,ModifyZooControl,它是一個UserControl。這是一個控件,因爲我想將它添加到多個窗口。如何從UserControl修改綁定的ObservableCollection(如果DataContext來自託管窗口)?
其中一個窗口是ModifyZooWindow,它從MVVMLight獲取DataContext。 我添加在窗口的XAML用戶控制:
<uc:ModifyZooControl/>
的ModifyZooControl了這一點,上市動物園實例的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的代碼隱藏中獲取原始viewmodel Animals observablecollection?
據我所知,一個選擇是爲UserControl添加ObservableCollections的兩個屬性。從Window實例化UserControl時設置它們的值。然後我會引用原始的ObservableCollections,並可以修改它們。 但是,真的需要,考慮到已經通過Window的datacontext對集合進行了某種引用...?
另外,UserControl是這種事情的正確選擇嗎?我應該使用框架還是其他的?
謝謝,非常實用! – Andrew