XAML x:在子用户控件中绑定

4szc88ey  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(127)

在WPF中,我有时会使用以下模式:

public class InnerViewModel {
  public int I {get ;set;}
}

public class OuterViewModel {
  public InnerViewModel Inner { get; } = new InnerViewModel();
}

外部视图:

<UserControl x:Class="OuterView" ...>
  <local:InnerView DataContext="{Binding Inner}"/>
</UserControl>

内部视图:

<UserControl x:Class="InnerView" ...>
  <TextBox Value="{Binding I}"/>
</UserControl>

在WinUI 3中,我可以使用x:Bind代替Binding。这通常与视图的代码隐藏文件中的ViewModel属性一起提供:

public sealed partial class OuterView : UserControl {
    public OuterViewModel ViewModel {
        get;
    }
    public OuterView() {
        this.InitializeComponent();
        this.ViewModel = App.GetRequiredService<OuterViewModel>(); 
    }
}

<UserControl x:Class="OuterView" ...>
  <local:InnerView DataContext="{x:Bind Inner}"/>
</UserControl>

但是对于InnerView,我不能使用x:Bind,因为它不适用于DataContext。有没有办法像DataContext-绑定那样初始化InnerViewViewModel-属性?或者只是不可能将这种模式应用于x:Bind-方法?

neskvpey

neskvpey1#

我想通了:x:Bind还可以处理非依赖属性,因此我可以执行以下操作:
第一个

<UserControl x:Class="InnerView" ...>
  <TextBox Value="{x:Bind ViewModel.I}"/>
</UserControl>

InnerView.ViewModel没有在构造函数中初始化,所以它需要一个setter,但它似乎可以工作。

相关问题