私は、Button.xamlで定義されている2つのボタンを含むView MainWindow.xamlを持っています。ボタンは、ボタンが表示されるかどうかを定義するプロパティIsVisible
にバインドされます。UserControlに渡された継承ViewModelが子として扱われますViewModel
MainWindow.xaml:
<local:Button DataContext="{Binding ButtonViewModel1}" />
<local:Button DataContext="{Binding ButtonViewModel2}" />
Button.xaml:ButtonViewModel
とButtonViewModelChild
:私は2つのviewmodelsを持っているボタンの
<StackPanel>
<Button Name="MyButton" Visibility="{Binding IsVisible}">
<TextBlock>My Button</TextBlock>
</Button>
</StackPanel>
。
ButtonViewModelChild
はButtonViewModel
から継承します。どちらも、IsVisible
プロパティを提供します。
ButtonViewModel:
public Visibility IsVisible
{
get
{
return Visibility.Hidden;
}
}
をButtonViewModelChild:
public new Visibility IsVisible
{
get
{
return Visibility.Visible;
}
}
MainWindow.xamlのViewModelには、プロパティButtonViewModel1
とButtonViewModel2
が含まれています。これらのプロパティは、次のようになります。ButtonViewModelChild
が使用されている場合ButtonViewModel
はボタンののDataContextとして使用し、表示されている場合は
public ButtonViewModel ButtonViewModel1
{
get
{
return new ButtonViewModelChild();
}
}
public ButtonViewModelChildButtonViewModel2
{
get
{
return new ButtonViewModelChild();
}
}
ボタンが不可視にする必要があります。
ButtonViewModel1をDataContextとして使用するボタンはButtonViewModel
となり、もう1つのボタンはButtonViewModelChild
になるとします。したがって、最初のボタンは表示されず、2番目のボタンが表示されます。どちらのボタンも表示されます。 WPFは何をしていますか?明らかに、インスタンスの継承ビューを両方とも使用します。作成されたインスタンス型ではなく、プロパティの戻り値の型を使用するようにWPFに指示する方法はありますか?
私は、メソッド隠蔽はベストプラクティスではないことを認識しています。私はおそらくデザインを変更するだろうが、なぜ結果が期待通りでないのか不思議です。
ありがとうございました。両方のボタンは表示されません。しかし、彼らは両方です。 – telandor