2014-10-02 77 views
0

我想從父視圖xaml中爲子控件設置視圖模型的屬性。從父視圖中設置子控件視圖模型的屬性xaml

所以我希望父XAML是這樣的:

<UserControl x:Class="MainUserControl" 
...> 
<Grid...> 
    <local:ChildDetailView x:Name="childView1" ChildVMProperty="ValueOptions.Option1"/> 
    <local:ChildDetailView x:Name="childView2" ChildVMProperty="ValueOptions.Option2"/> 
</Grid> 
</UserControl> 

凡ChildVMProperty是在ChildDetailViewModel屬性(櫃面它是相關的,屬性類型需要的ValueOptions枚舉)。

請注意,ViewModels是在後面的代碼(不是在xaml中)設置的,因爲實際上我在ViewModels中使用DI來注入棱鏡事件聚合器。

當我嘗試做這樣的事情時,xaml抱怨,因爲它顯然對ChildViewModel類一無所知。什麼是正確的語法來做到這一點,或者如果它不那麼直截了當,我有什麼選擇來解決這個問題?

回答

0

您需要先創建ChildDetailView.xaml文件。比方說,你把這個文件命名空間中的MyApp.Controls,那麼你上面的XAML將類似於

<UserControl x:Class="MainUserControl" 
      xmlns:local="clr-namespace:MyApp.Controls" > 
    <Grid ...> 
     <local:ChildDetailView x:Name="childView1" ChildVMProperty="ValueOptions.Option1"/> 
     <local:ChildDetailView x:Name="childView2" ChildVMProperty="ValueOptions.Option2"/> 
    </Grid> 
</UserControl> 

你必須確保你有你的UserControl還定義DependencyProperty(DP)ChildVMProperty - 但這是另外一個問題關於這個特定主題有很多答案。要爲視圖添加DP,您可能需要對您嘗試定位的特定控件進行子類別分類。

使用DP作爲屬性的另一種替代方法是使用轉換器。

我希望這會有所幫助。

+0

謝謝。如果我將DP添加到子視圖,子ViewModel如何知道該值是什麼? (這是需要使用該值的子ViewModel) – Jason 2014-10-02 10:52:40

+0

通過綁定到DP。 'ChildVMProperty = {綁定PropertyInTheModel}'。 – MoonKnight 2014-10-02 13:24:45

+0

如果我綁定屬性,那麼我無法真正設置xaml中的值。我查看了OneWayToSource綁定,但無法確定如何指定值(TargetNullValue不起作用)。 – Jason 2014-10-02 16:32:31

相關問題