Combobox с составной коллекцией не обновляется с изменениями в наблюдаемой коллекции

Как следует из названия; У меня есть комбинированный список, использующий составную коллекцию для привязки к наблюдаемой коллекции с использованием шаблона MVVM.

Если я загружаю свою модель с существующими данными, то в выпадающем списке отображаются значения, поэтому я знаю, что привязка работает. Я могу добавить элементы в наблюдаемую коллекцию, и они отображаются в сетке данных, поэтому я знаю, что в уведомлении измененные свойства события в наблюдаемой коллекции работают. Я подозреваю, что это не работает, потому что составная коллекция использует "Статический ресурс" в качестве источника, но если я изменяю его на Динамический ресурс, то я получаю ошибку:

"DynamicResourceExtension" нельзя установить для свойства "Source" типа "Binding". DynamicResourceExtension может быть установлен только для свойства DependencyProperty объекта DependencyObject.

Я искал несколько дней, чтобы найти решение, и в то время как другие сталкивались с подобными проблемами, решения еще не решили мою проблему.

Вот мой код для модели:

    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:Reference для контекста данных, но я не могу определить правильный синтаксис для этого.

Если вы все еще читаете это, то любая помощь очень ценится.

1 ответ

В конце концов, я так и не получил комбо-бокс для заполнения из другой модели представления. Я все еще не уверен, возможно ли это или нет.

Решение, которое наконец-то сработало для меня, состояло в том, чтобы просто объединить все, что мне нужно для привязки, в одну модель представления. Это сделало модель представления немного тяжелой, но сильно сократило XAML, так что, думаю, это победа.

Другие вопросы по тегам