2011-06-03 23 views
6

我想使用x:Name綁定通過Caliburn.Micro的約定來解決嵌套的衛星用戶控件中的屬性綁定。解析外部用戶控件x:Caliburn.Micro中的名稱約定綁定

我們Views的界面非常標準。我們有一個包含用戶控件然後將其用於組成我們的觀點的UI,類似於下面的例子衛星項目:

<UserControl x:Class="Company.CompanyView" ...> 
    <StackPanel> 
     <customControls:CompanyNameControl /> 
     <customControls:CompanyAddressControl /> 
     .... 
    </StackPanel> 
</UserControl> 

視圖模型對這一觀點暴露出將由組件綁定到性質組成這些用戶控件。

class CompanyViewModel : ... 
{ 
    public string CompanyName { get; set; } 
    public string CompanyAddressNo { get; set; } 
    public string CompanyAddressStreet { get; set; } 
    ... 
} 

用戶控制通常是簡單的,但他們在很多不同的意見很大程度上重用。下面是一個可能的樣子的例子:

<UserControl x:Class="CustomControls.CompanyNameControl ...> 
    <StackPanel Orientation="Horizontal">    
     <TextBlock Text="Company Name: " /> 
     <TextBox x:Name="CompanyName" /> <!--This is how I'd like to bind--> 
     <TextBox Text="{Binding CompanyName}" /> <!--This is how I currently bind--> 
    </StackPanel> 
</UserControl> 

我的理解是,在Caliburn.Micro,X:名稱約定式綁定僅如果有一個視圖模型的查看工作。在這種情況下,UserControl本身不是一個View。它用於組成的視圖。

有沒有辦法讓綁定解析到ViewModel上,這個嵌套的衛星UserControl是由哪個View組成的?

回答

8

您需要使用cal:Bind.Model =「{Binding}」您使用該控件的位置; cal是Caliburn.Micro的xmlns。

<UserControl x:Class="Company.CompanyView" ...> 
    <StackPanel> 
     <customControls:CompanyNameControl cal:Bind.Model="{Binding}"/> 
     <customControls:CompanyAddressControl cal:Bind.Model="{Binding}"/> 
     .... 
    </StackPanel> 
</UserControl> 
+0

啊,我知道這是愚蠢的......謝謝! – Adrian 2011-06-06 20:26:16