在我的主窗口,我有一個ListBox
其ItemsSource
勢必Layout
的ObservableCollection
POCO對象:親子裏面的DataTemplate
<ListBox x:Name="ListBox" ItemsSource="{Binding Layouts}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
此外,在主窗口中,我們定義的可視化表示使用UserControl
(LayoutUserControl)佈局對象:
<DataTemplate DataType="{x:Type local:Layout}">
<local:LayoutUserControl />
</DataTemplate>
當我們將對象添加到佈局集合,我們看到新的LayoutUserControls填充ListBox。這非常簡單。
現在,我想要做的是以某種方式從MainWindow與各個LayoutUserControls進行通信。具體來說,從MainWindow中,我想調用每個LayoutUserControls上的單個方法...如果我試圖遍歷ListBox的Items集合,我所得到的只是對Layout對象的引用,而不是對LayoutUserControls的引用。由於LayoutUserControls是在一個DataTemplate中定義的,我沒有一個命名引用來訪問它們...
是否有一個WPF構造支持從父到子控件這種類型的交互? RoutedEvents是我的第一個想法,但他們只支持孩子與父母(泡泡)的交流。也許命令是要走的路?
任何幫助,將不勝感激。
謝謝!
感謝您的及時反饋。如果可能,我想遠離「舊學校」活動註冊。我相當有信心,我可以在LayoutUserControl中公開一個簡單的ICommand。我如何綁定到它並從MainWindow中調用它?任何可以分享的參考資料或例子? – 2012-01-17 16:49:26
@JohnRussell:那麼,命令通常是ui數據,而你想要的數據就是ui數據,所以在我看來,使用舊學校活動會更容易。使用命令肯定可以起作用,但我不能給出一個很好的方法,但我也會考慮它... – 2012-01-17 16:54:35
啊。現在,我想我知道你要去哪裏了...如果我錯了,請糾正我。我可以向Layout對象添加一個方法,將其稱爲OnRaiseEvent()。它將從我的MainWindow中調用集合中的每個佈局。在Layout對象內部,OnRaiseEvent會向LayoutUserControl引發一個事件來執行我的任務。那是你在說什麼? – 2012-01-17 17:02:47