2013-06-03 24 views
0

我會盡力給予了一下這個問題 的更多細節在WPF應用程序,在「主窗口」的左側,我有一個包含一個列表框一個用戶控件,這樣WPF之間的數據綁定

<UserControl.Resources> 
    <ObjectDataProvider x:Key="viewModel" ObjectType="{x:Type vm:TemplateListViewModel}"/> 
</UserControl.Resources> 
<StackPanel> 
    <ListBox Height="Auto" Name="TemplateList" ItemsSource="{Binding Source={StaticResource viewModel}, Path=TemplateNames}"  
</StackPanel> 

如圖所示,列表框項是通過viewModel從xml文件中獲取的。 現在我有另一個usercontrol2包含一個標籤來回顯「TemplateList」的選擇。 也在這個標籤下,我有另一個usercontrol3包含一個datagrid,哪些數據將從基於標籤的xml文件中獲取,或者通過usercontrol3的viewmodel從窗口左側的列表框中選擇。 所以問題是如何將「SelectedItem」或「SelectedIndex」傳遞給Label和DataGrid的viewModel? 我知道它適用於將標籤綁定到帶有'elementName'和'SelectedItem'的路徑的列表框。現在我無法弄清楚如何處理usercontrols和'ObjectDataProvider'。我試着按照下面的建議無法解決它。到目前爲止爲usercontrol2,如果我用同樣的ObjectDataProvider如上述,我能得到這個標籤爲

<Label Name="TemplateNameLabel" Content="{Binding Source={StaticResource viewModel}, Path=TemplateNames[0]}" /> 

在哪裏,因爲它是從XML文件中讀取,如果類型「的XmlNodeList」的「TemplateNames」工作。但我真的想要的是像

<Label Name="TemplateNameLabel" Content="{Binding Source={StaticResource viewModel}, Path=TemplateNames[SelectedIndex]}" /> 

這可以做到沒有任何命令,就像綁定到'elementname'而不涉及usercontrol? 謝謝。

+1

在ViewModel中放入SelectedItem屬性,並從第二個ViewModel引用該屬性。編寫用戶界面的不同部分通常由ViewModels之間的通信解決,而不是Views。 –

+0

@ user2417994,你的問題仍然適用? – Sevenate

回答

0

我已經刪除並不重要特性突出主:

<ListBox Name="TemplateList" ItemsSource="{Binding Source={StaticResource viewModel}, Path=TemplateNames}" SelectedItem="{Binding Path=SelectedTemplate, Mode=OneWayToSource}" /> 

請注意,您將需要SelectedTemplate物業類型的公共二傳手TEMPLATENAME - 這是用於單同類型元素模板名稱集合ViewModel。在那個setter中,你可以將這個值傳遞給你需要的任何其他視圖模型。