0

コンボボックス (WPF、MVVM) でのバインディングに問題があります。AViewModel にバインドするコンボボックスがあります(たとえば)。それを行うために、私は持っていました: - AModel - AViewModel - Xaml ファイル:

<Window.DataContext>
    <ViewModel:AViewModel/>
</Window.DataContext>

それは正常に動作します。

しかし、今、上記のコンボボックスと同じフォームにコンボボックスをもう 1 つ追加します。このコンボボックスは、異なる ViewModel にバインドされます (たとえば、BViewMoel、この BViewModel は上記の AViewModel とは異なるファイルにあることに注意してください)。そして、これはコンボボックスのxamlです:

<ComboBox 
    DataContext="BViewModel" 
    ItemsSource="{Binding Path=MyList}" DisplayMemberPath="BName"/>

私の問題は次のとおりです。データコンテキストがないため、2 番目のコンボボックスに値が入力されません。しかし、AViewModelに対して上記で設定されているため、datacontextを設定できません。

私はたくさんの検索をしましたが、私はまだこれに固執しています。すべてのViewModelをViewModelにマージし、これをウィンドウのデータコンテキストまたは任意の理想に設定する必要がありますか? ありがとうございました。

4

2 に答える 2

4

実際、コンボボックスごとに ViewModel を使用することはありません。Combobox は単純なコントロールです。所有者ビューの ViewModel のItemsSourceパブリック プロパティ (ObservableCollection<T>たとえば型) にプロパティをバインドする必要があります。

特定の複雑なユーザー コントロールに ViewModel を使用すると便利な場合があります。この場合、viewModel を所有者ビューの ViewModel のパブリック プロパティとして公開できます。

public class UCViewModel : ViewModelBase
{
}

public class MyViewViewModel : ViewModelBase
{
    public MyViewViewModel()
    {
        this.UCViewModel = new UCViewModel();
    }

    public UCViewModel UCViewModel { get; set; }
}

<Window x:Class="MyView">

    <MyComplexUsercontrol DataContext="{Binding UCViewModel}" />

</Window>

public partial class MyView : Window
{
    public MyView()
    {
        InitializeComponent();
        this.DataContext = new MyViewViewModel();
    }
}

ただし、単純なコンボボックスの場合は、オーナー ビューに関連付けられた ViewModel のプロパティにバインドするだけです。

于 2013-06-14T09:29:20.077 に答える
2
combobox1.DataContext = new AViewModel();
combobox2.DataContext = new BViewModel();

しかし、2 つのプロパティを含む ViewModel を使用することをお勧めします。

public class ViewModel
{
    public AViewModel AViewModel{get;set;}
    public BViewModel BViewModel{get;set;}
}
于 2013-06-14T09:30:38.010 に答える