Button.xaml で定義されている 2 つのボタンを含む View MainWindow.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>
Button には、 と の 2 つの 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 として使用するボタンは を取得しButtonViewModel
、他のボタンは を取得すると仮定しましたButtonViewModelChild
。したがって、最初のボタンは表示されず、2 番目のボタンは表示されます。ただし、両方のボタンが表示されます。ここでWPFは何をしますか? 明らかに、インスタンスの継承されたビューを両方とも使用します。作成されたインスタンスの型ではなく、プロパティの戻り値の型を使用するように WPF に指示する方法はありますか?
メソッドの非表示がベスト プラクティスではないことは承知しています。おそらくデザインを変更しますが、なぜ結果が期待どおりにならないのか興味があります.