2012-07-19 64 views
1

我有一個用戶控件與綁定到viewmodel爲該用戶控件集合的4個組合框。如何從wpf窗體viewmodel訪問usercontrol中的組合框文本?

我已經用wpf格式使用這個控件。這個wpf表單有它自己的viewmodel。

如何從wpf窗體的viewmodel中的4個組合框中訪問文本?

+0

請不要使用wpf格式!它的WPF窗口/用戶控制/視圖;) – blindmeis 2012-07-20 06:18:24

+0

也很高興看到一些代碼。爲你的wpf窗口設置datacontext,viewmodel代碼,你的組合框的xaml等等。 – blindmeis 2012-07-20 06:27:50

回答

0

編輯:我看到你有不同的viewmodels。現在這取決於使用的用戶控件和使用MVVM :)

  • 您可以使用Messenger或eventaggregator從usercontrolviewmodel comunicate的seleteditems到mainviewmodel的。
  • 你也可以在你的usercontrol中使用RelativeSource綁定,直接將選定的項目綁定到你的mainviewmodel(usercontrol然後只是一個控件組合)。
  • 你可以可以消除用戶控件視圖模型,並把所有的mainviewmodel,把我的老例子
  • 你可以創建你的用戶控件的SelectedItems DependencyProperties!(不是用戶控件視圖模型!),並結合這些在性能你mainviewmodel。我認爲這是最簡潔的方式,如果用戶控件應該是一個真正的用戶控件。

老例如: 在你的視圖模型://真正的代碼當然應該實行INotifyPropertyChanged和您的用戶控件提高得當

public ObservableCollection<string> MyFirstCollection {get; set;}//init once, add,remove,clear to alter 

public string MySelectedCombobox1Value {get;set;} 

<ComboBox ItemsSource="{MyFirstCollection }" SelectedItem="{Binding MySelectedCombobox1Value, Mode=TwoWay}" /> 

多數民衆贊成有關你的問題。確保你設置了DataContext的權利。你可以使用snoop等工具來檢查它。我發佈的代碼預計combobox的dataconext是viewmodel。

+0

謝謝..我得到它與您的代碼片段的幫助工作 – 2012-07-22 02:09:57

0

UserControl應該繼承您將其添加到其中的視圖模型的表單的數據上下文。然後,UserControl中的任何綁定都將相對於繼承的數據上下文。你有沒有嘗試綁定到視圖模型屬性ComboBox.Text

UPDATE

對不起,誤解你的問題。沒有看到用戶控件已經擁有自己的視圖模型。

雖然看起來有更好的方法,但您可以在用戶控件上公開每個組合框文本的依賴屬性。只是大聲思考。

0

唯一干淨的方法是使用綁定,如果用戶控件爲ViewModel或單個文本屬性(如sellmeadog所建議的)提供DependencyProperty供消費,則建議的唯一方法是。然後,您可以在父視圖模型中直接綁定到該依賴屬性的屬性。

+0

謝謝,我暴露了usercontrol的依賴屬性 – 2012-07-22 02:10:51