4

私は投稿で答えを見つけるために数回試みましたが、まだ見つかりませんでした (少なくとも、WPF にかなり慣れていないので、私が理解していることでは)。

ビュー コンストラクターでデータ コンテキストを定義します。

this.DataContext = viewModel;

可能であれば、単一のビューで複数のデータ コンテキストを使用したいですか? 他の人から、これに対する一貫性のない回答が複数あると聞きました。目標は、複数のビュー モデルのプロパティにアクセスする必要があることです。たとえば、私のビュー XAML は、以下に示すような場合に使用されます。

<MultiBinding Converter="{StaticResource multiBooleanToVisibilityConverter}">
                <Binding Path="ResultControlsVisibileByDefault" UpdateSourceTrigger="PropertyChanged"/>
                <Binding Path="StarWidthValueList.Count" UpdateSourceTrigger="PropertyChanged"/>
            </MultiBinding>

適切なビュー モデルで各プロパティを明示的に参照できれば素晴らしいと思います。

注: メイン ウィンドウに重ねられたウィンドウに基づく複数のビュー モデルがあります。それらは、ユーザーが行うウィザードのような選択に基づいてアクティブになります。

4

1 に答える 1

16

私が見つけた最も簡単な解決策は、他のViewModelをとして保持する1つのViewModelを持つことPropertiesです。次に、ビューは、すべての異なるViewModelから必要なプロパティにアクセスできます...

説明のために、VMContainerを使用できます。

public class VMContainer
{
    public FirstViewModel   VM1 { get; set; }
    public SecondViewModel  VM2 { get; set; }
}

次に、ビューで、特定のVMプロパティをすでに設定してDataContextいるインスタンスに設定します...VMContainer

次に、XAMLでこのようなことを行うことができます

<Textbox Text="{Binding VM1.SomePropertyInFirstViewModel}" />
<Textbox Text="{Binding VM2.SomePropertyInSecondViewModel}" />

このためだけに新しいクラスを作成する必要はないことに注意してください。VMContainer他のVMの既存のVMに新しいプロパティを追加することもできます(VMが表すものに基づいて可能/論理的である場合)

于 2013-03-08T17:30:37.370 に答える