复合集合的Combobox不会更改observablecollection

时间:2015-02-04 01:21:39

标签: c# mvvm combobox observablecollection compositecollection

正如标题所示;我有一个使用复合集合的组合框,使用MVVM模式绑定到可观察集合。

如果我使用现有数据加载模型,那么组合框会显示值,因此我知道绑定有效。我可以将项添加到observable集合中,它们显示在数据网格中,因此我知道可观察集合上的notify属性已更改事件正在运行。我怀疑它不起作用,因为复合集合使用“静态资源”作为其源,但如果我将其更改为动态资源,那么我得到错误:

  

无法在'Source'属性上设置'DynamicResourceExtension'   输入'绑定'。 'DynamicResourceExtension'只能在a上设置   DependencyObject的DependencyProperty。

我已经搜索了几天找到解决方案,而其他人遇到类似的问题,解决方案尚未解决我的问题。

以下是我的模型代码:

    public class Model : ObservableObject
{
    #region Properties

    private string name;
    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }

    private string balance;
    public string Balance
    {
        get { return this.balance; }
        set { this.balance = value; }
    }
    #endregion

我的ViewModel:

public class ViewModel : ObservableObject
{
    private ObservableCollection<Model> modelcollection;
    public ObservableCollection<Model> ModelCollection
    {
        get { return modelcollection; }
        set
        {
            modelcollection= value;
            RaisePropertyChangedEvent("ModelCollection");
        }
    }

    private string _name;
    public string Name 
    {
        get { return _name; } 
        set
        {
            _name = value;
            RaisePropertyChangedEvent("Name");
        }
    }
    private string _balance;
    public string Balance 
    {
        get { return _balance; } 
        set
        {
            _balance = value;
            RaisePropertyChangedEvent("Balance");
        }
    }

最后是我对组合框的看法的XAML:

<ComboBox MinWidth="100" SelectedValue="{Binding combovalue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Name">
    <ComboBox.Resources>
        <vm:ViewModel x:Key="CollectionKey"/>
    </ComboBox.Resources>

    <ComboBox.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding ModelCollection, Source={StaticResource CollectionKey}, UpdateSourceTrigger=PropertyChanged}"/>
        </CompositeCollection>
    </ComboBox.ItemsSource>

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

提前谢谢你们。

编辑:

所以我朝着一个方向前进;对还是错还有待决定。

我认为我已将此问题追溯到组合框本身之外,因此需要更多上下文。

comobobox位于选项卡控件的第二个选项卡上。每个选项卡项都有自己的数据上下文,指向其自己的视图模型。数据在第一个选项卡上输入,我希望数据显示在第二个选项卡上的组合框中。

如果我在第一个选项卡上放置一个组合框,那么该组合框会根据第一个选项卡上输入的可观察集合中的更改进行更新。所以问题(我认为)是第二个选项卡上的组合框试图同时绑定到两个不同的视图模型。一个用于项目源,另一个用于所选值。

在另一个线程中有一个建议使用x:数据上下文的引用,但我似乎无法找出正确的语法。

如果您还在阅读本文,那么我们非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

最后,我从来没有从其他视图模型中填充组合框。我仍然不确定这是否可行。

最终为我工作的解决方案是将我需要的所有内容组合到一个视图模型中。它使得视图模型有点沉重,但在XAML上减少了很多,所以我猜这是一场胜利。