C# 组合集合的组合框未随observablecollection的更改而更新

C# 组合集合的组合框未随observablecollection的更改而更新,c#,mvvm,combobox,observablecollection,compositecollection,C#,Mvvm,Combobox,Observablecollection,Compositecollection,正如标题所示;我有一个组合框,使用复合集合绑定到使用MVVM模式的可观察集合 如果我使用现有数据加载模型,那么组合框将显示这些值,这样我就知道绑定是有效的。我可以将项目添加到可观察集合中,它们显示在数据网格中,这样我就知道可观察集合上的notify属性更改事件正在工作。我怀疑它不起作用,因为复合集合使用“静态资源”作为其源,但如果我将其更改为动态资源,则会出现错误: 无法在的“源”属性上设置“DynamicResourceExtension” 键入“Binding”。“DynamicResour

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

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

无法在的“源”属性上设置“DynamicResourceExtension” 键入“Binding”。“DynamicResourceExtension”只能在上设置 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");
        }
    }
public类ViewModel:observeObject
{
私有可观测集合模型集合;
公共可观测集合模型集合
{
获取{return modelcollection;}
设置
{
modelcollection=值;
RaisePropertyChangedEvent(“模型集合”);
}
}
私有字符串\u名称;
公共字符串名
{
获取{return\u name;}
设置
{
_名称=值;
RaisePropertyChangedEvent(“名称”);
}
}
私人字符串(u)余额;;
公共字符串余额
{
获取{return\u 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>

提前非常感谢大家

编辑:

因此,我已朝着一个方向前进;对错尚未决定

我想我已经追踪到问题出在组合框本身之外,所以这里需要更多的上下文

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

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

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


如果您仍在阅读本文,那么非常感谢您的帮助。

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

最终对我有效的解决方案是将绑定所需的一切合并到一个视图模型中。这使得视图模型有点重,但在XAML上减少了很多,所以我想这是一个胜利