2012-04-04 120 views
0

我是WPF的新手。我試圖構建一個具有函數的應用程序(稱爲初始化),用戶必須填寫大量數據並重復表單的某些部分。儘管我們可能會在一個窗口中使用可摺疊面板,而不是下一頁/上一頁,但我們正在重寫一個具有相當長嚮導的舊應用。還有一些部分重複例如用戶可以指定一些項目,如果他們說3他們需要填寫每個項目的配置信息,那麼這些控件需要重複三次。WPF數據綁定兒童控制

我使用MVVM在這裏用我這個例子:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

老巫師有大約4頁,所以我打算有一個包含4個個子用戶控件打破了一個用戶控件(初始化) xaml了一下。

到目前爲止,我有初始化(其視圖模型從工作區視圖模型繼承在上面的例子),它包含一個孩子這是工作:

<Expander ExpandDirection="Down" Header="ChildOne"> 
<view:ChildOne /> 
</Expander> 

我將爲每個孩子和Intialisation單獨的ViewModels這帶來了我的問題。 我遇到的問題是,ChildOne包含了我想要綁定像這樣一個下拉:

<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=TextMessageSelectionOptions, Mode=OneTime}"/> 

TextMessageSelectionOptions是ChildOne的視圖模型的公共屬性。這不會導致錯誤,而是一個空的下拉列表 - 該屬性getter永遠不會被調用。如果我將該屬性獲取器代碼移入Initialisation的ViewModel,但它可以工作,但我試圖將代碼保存在可管理的塊中,因此我想將代碼放回到ChildOne的ViewModel中。它也可以,如果在我的主窗口創建ChildOne爲工作區,而不是初始化這樣

ChildOneViewModel ws = this.Workspaces.FirstOrDefault(vm => vm is ChildOneViewModel) as ChildOneViewModel; 

誰能勸我是否採取正確的方法(通過將其劃分成幾個用戶控件)和我需要什麼在綁定中做這個工作?我並不十分了解這些特別的約束力。

回答

1

在我看來,您的ChildOne視圖的DataContext仍然是此Initialisation vm。

您可以綁定其觀點Datacontext到ChildOneViewModel對象

... 
<view:ChildOne DataContext={Binding PropertyReturnsChildOneViewModellObject/> 
... 

或指定組合框的ItemsSource道具的路徑。

<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=PropertyReturnsChildOneViewModellObject.TextMessageSelectionOptions, Mode=OneTime}"/> 

注意:PropertyReturnsChildOneViewModellObject是Initialisation虛擬機的一個屬性。

+0

這兩個工作,我選擇了前者,因爲會有幾個控件需要綁定到屬性childviewmodel。謝謝 - 我沒有足夠的聲望投票。 – Nix 2012-04-04 11:55:39