0

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 には、プロパティButtonViewModel1ButtonViewModel2. これらのプロパティは次のようになります。

public ButtonViewModel ButtonViewModel1
{
    get
    {
        return new ButtonViewModelChild();
    }
}

public ButtonViewModelChildButtonViewModel2
{
    get
    {
        return new ButtonViewModelChild();
    }
}

ButtonViewModelがボタンの DataContext として使用されている場合、ボタンは非表示になり、 が使用されている場合ButtonViewModelChildは表示されます。

ButtonViewModel1 を DataContext として使用するボタンは を取得しButtonViewModel、他のボタンは を取得すると仮定しましたButtonViewModelChild。したがって、最初のボタンは表示されず、2 番目のボタンは表示されます。ただし、両方のボタンが表示されます。ここでWPFは何をしますか? 明らかに、インスタンスの継承されたビューを両方とも使用します。作成されたインスタンスの型ではなく、プロパティの戻り値の型を使用するように WPF に指示する方法はありますか?

メソッドの非表示がベスト プラクティスではないことは承知しています。おそらくデザインを変更しますが、なぜ結果が期待どおりにならないのか興味があります.

4

2 に答える 2