在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
-绑定那样初始化InnerView
的ViewModel
-属性?或者只是不可能将这种模式应用于x:Bind
-方法?
1条答案
按热度按时间neskvpey1#
我想通了:
x:Bind
还可以处理非依赖属性,因此我可以执行以下操作:第一个
和
InnerView.ViewModel
没有在构造函数中初始化,所以它需要一个setter,但它似乎可以工作。