0

我在组合框(WPF、MVVM)中绑定时遇到问题。我有一个组合框,它绑定到 AViewModel (例如)。为此,我确实有: - AModel - AViewModel - Xaml 文件:

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

它工作正常。

但是,现在,我在上面的组合框相同的表单中添加了一个组合框。此组合框绑定到不同的 ViewModel(例如 BViewMoel,请注意,此 BViewModel 位于与上面的 AViewModel 不同的文件中)。这是组合框 xaml:

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

我的问题是:第二个组合框没有填充,因为它没有数据上下文。但我无法为其设置数据上下文,因为它是为 AViewModel 设置的。

我做了很多搜索,但我仍然坚持这一点。我应该将所有 ViewModel 合并到一个 ViewModel 中并将其设置为 Window 的 Datacontext 还是任何理想的?谢谢你。

4

2 回答 2

4

真的,我不会为每个组合框使用 ViewModel。Combobox 是一个简单的控件,您应该将ItemsSource属性绑定到所有者视图的 ViewModel 的公共属性(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();

但我建议使用包含两个属性的 ViewModel。

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