解决外部用户控制x:Caliburn.Micro中的名称约定绑定

Adr*_*ian 7 wpf caliburn.micro

我想通过Caliburn.Micro的约定使用x:Name绑定来解析嵌套的卫星用户控件中的属性绑定.

我们的视图的UI非常标准.我们有一个包含用户控件的卫星项目,然后用于在我们的视图中组成UI,类似于下面的示例:

<UserControl x:Class="Company.CompanyView" ...>
    <StackPanel>
        <customControls:CompanyNameControl />
        <customControls:CompanyAddressControl />
        ....
    </StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

此View的ViewModel公开将由组成这些用户控件的组件绑定的属性.

class CompanyViewModel : ...
{
    public string CompanyName { get; set; }
    public string CompanyAddressNo { get; set; }
    public string CompanyAddressStreet { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

用户控件通常很简单,但它们在许多不同的视图中被大量重用.以下是一个可能的示例:

<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>
Run Code Online (Sandbox Code Playgroud)

我的理解是,在Caliburn.Micro中,x:名称约定样式绑定仅在View的ViewModel有效时才有效.在这种情况下,UserControl本身不是View.它用于构成视图.

有没有办法使绑定解析为构建嵌套的卫星UserControl的View的ViewModel?

小智 9

你需要使用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>
Run Code Online (Sandbox Code Playgroud)