0

説明:

DataContextすでにいくつかのリストに設定されているビューがあります。

またComboBox、可視性イベントをトリガーする必要があるがありStackPanelます。これは、を実装しているプロパティ「SelectedVisibility」を介して行われますINotifyPropertyChanged

問題:

プロパティ「SelectedVisibility」はクラスの一部ではありませんDataContextが、ViewModelクラス内にあり、ViewModelを明示的にバインドしてそのプロパティに到達する方法を見つけることができません。

質問:

VMをComboBoxのSelectedValueバインディングのDataContextとして明示的に定義する方法を知っていますか?

コードの詳細:

XAMLを表示:

<ComboBox ItemsSource="{Binding Source={StaticResource VisibilityEnum}}" SelectedValue="{Binding Path=SelectedVisibility}"/>

<StackPanel Visibility="{Binding Path=SelectedVisibility,Converter={StaticResource SelectedValueToVisible}}">

背後にあるコードを表示:

public Counterparties_UserInputs()
{
    // Cannot bind this as already bound
    // this.DataContext = _VM;
    InitializeComponent();
}

モデルの表示:

public event PropertyChangedEventHandler PropertyChanged;

public string SelectedVisibility
{
    get 
    {
        return _selectedVisibility; 
    }
    set
    {
        _selectedVisibility= value;
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs("SelectedVisibility"));
        }
    }
}

前もって感謝します!

4

1 に答える 1

0

ビューに新しい依存関係プロパティを追加し、ビュー モデルをこのプロパティにバインドしてから、このプロパティを StackPanel と ComboBox の DataContext として使用できます。例 (「this」はビューの名前、「AdditionalContext」はビューモデルを格納するために宣言する依存プロパティです):

<StackPanel DataContext="{Binding AdditionalContext, ElementName=this}" Visibility="{Binding Path=SelectedVisibility, Converter={StaticResource SelectedValueToVisible}}"/>

ただし、MVVM パターンに違反するため、これを行うべきではありません。ビューモデルの要点は、ビューの DataContext として使用することです。問題への正しいアプローチは、リスト宣言をビューモデルに移動することです。

于 2013-03-07T06:53:35.483 に答える