我想使用x:Name绑定来解析嵌套的卫星用户控件中的属性绑定,通过Caliburn.Micro的约定。
我们的视图的UI非常标准。我们有一个包含用户控件的卫星项目,然后用于在我们的视图中组成UI,类似于下面的示例:
<UserControl x:Class="Company.CompanyView" ...>
<StackPanel>
<customControls:CompanyNameControl />
<customControls:CompanyAddressControl />
....
</StackPanel>
</UserControl>
此View的ViewModel公开将由构成这些用户控件的组件绑定的属性。
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:名称约定样式绑定仅在View的ViewModel有效时才有效。在这种情况下,UserControl本身不是View。它习惯于撰写视图。
有没有办法让绑定解析为构建嵌套卫星UserControl的View的ViewModel?
答案 0 :(得分: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>