我有一个 View MainWindow.xaml,其中包含在 Button.xaml 中定义的两个按钮。按钮绑定到IsVisible
定义按钮是否可见的属性。
MainWindow.xaml:
<local:Button DataContext="{Binding ButtonViewModel1}" />
<local:Button DataContext="{Binding ButtonViewModel2}" />
按钮.xaml:
<StackPanel>
<Button Name="MyButton" Visibility="{Binding IsVisible}">
<TextBlock>My Button</TextBlock>
</Button>
</StackPanel>
对于按钮,我有两个 ViewModel:ButtonViewModel
和ButtonViewModelChild
.
ButtonViewModelChild
继承自ButtonViewModel
。两者都提供IsVisible
属性:
按钮视图模型:
public Visibility IsVisible
{
get
{
return Visibility.Hidden;
}
}
ButtonViewModelChild:
public new Visibility IsVisible
{
get
{
return Visibility.Visible;
}
}
MainWindow.xaml 的 ViewModel 包含一个属性ButtonViewModel1
和ButtonViewModel2
. 这些属性如下所示:
public ButtonViewModel ButtonViewModel1
{
get
{
return new ButtonViewModelChild();
}
}
public ButtonViewModelChildButtonViewModel2
{
get
{
return new ButtonViewModelChild();
}
}
ButtonViewModel
如果用作按钮的 DataContext,则该按钮应该是不可见的,如果使用,则应该是可见的ButtonViewModelChild
。
我假设使用 ButtonViewModel1 作为 DataContext 的按钮得到 a ButtonViewModel
,另一个按钮得到 a ButtonViewModelChild
。所以第一个按钮将不可见,而第二个按钮将不可见。两个按钮都是可见的。WPF 在这里做什么?显然,它两次都使用了实例的继承视图。有没有办法告诉 WPF 使用属性的返回类型而不是创建的实例类型?
我知道方法隐藏不是最佳实践。我可能会更改设计,但我很好奇为什么结果不如预期。