ViewModel Уведомить связанный ComboBox, что список был изменен - PullRequest
0 голосов
/ 30 апреля 2018

У меня ComboBox привязан к статическому List.

Я хочу изменить элементы в списке, но ComboBox не будет обновляться, чтобы отразить изменения.


1008 * XAML * <ComboBox x:Name="cbo" ItemsSource="{Binding ComboBox_Items, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding cbo_SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Width="100" /> C Sharp

Класс ViewModel

Получить / установить элементы ComboBox

public static List<string> _cbo_Items = new List<string>()
{
    "Item 1",
    "Item 2",
    "Item 3"
};

public static List<string> ComboBox_Items
{
    get { return _cbo_Items; }
    set { _cbo_Items = value;}
}

public static string cbo_SelectedItem { get; set; }

Другой класс

Обновление списка новыми элементами

ViewModel._cbo_Items = new List<string>()
{
    "Item 4",
    "Item 5",
    "Item 6"
};

Решение

Я пробовал это, он вылетает с нулевым исключением на viewModel.OnPropertyChanged("ComboBox_Items")

public static ViewModel viewModel;

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string propertyName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}


public static List<string> ComboBox_Items
{
    get { return _cbo_Items; }
    set { _cbo_Items = value;
          viewModel.OnPropertyChanged("ComboBox_Items");
    }
}

1 Ответ

0 голосов
/ 30 апреля 2018

При 'новом' списке привязка нарушается, вы можете использовать observablecollection и очистить, а затем добавить элементы вместо создания нового экземпляра.

также исправьте привязку для свойства selecteditem в выпадающем списке

<ComboBox x:Name="cbo" 
      ItemsSource="{Binding ComboBox_Items}"
      SelectedItem="{Binding cbo_SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
      HorizontalAlignment="Left"
      Margin="0,0,0,0" 
      VerticalAlignment="Top" 
      Width="100" />

и будет также лучше удалить установщик для ComboBox_Items, чтобы предотвратить его повторное создание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...