Связывание выбранного элемента в ComboBox - PullRequest
0 голосов
/ 26 апреля 2019

У меня проблема со связыванием со свойством SelectedItem в ComboBox.

Существует ObservableCollection, которая связана со свойством ItemsSource и другим полем объекта, которое я хочу связать со свойством SelectedItem, в приложении.

Но приложение даже не запускается из-за исключения Target Invocation.

Я не знаю, важно ли связывать SelectedItem с одним из свойств одного экземпляра ItemsSource, или я могу использовать для него объявление свойства в viewmodel.Я пробовал оба варианта.Не помоглоЯ читал некоторые темы о такой проблеме, но эти решения не решают эту проблему.

<ComboBox x:Name="CategoryComboBox"
                  ItemsSource="{Binding CategoryList}"
                  DisplayMemberPath="Name"
                  SelectedItem="{Binding SelectedCategory, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                  SelectionChanged="CategoryComboBox_SelectionChanged"
                  />



public ObservableCollection<IItem> CategoryList { get; set; }

public IItem SelectedCategory
{
    get
    {
        return _selectedCategory;
    }
    set
    {
        _selectedCategory = value;
        RaisePropertyChangedEvent(nameof(SelectedCategory));
    }
}

public interface IItem
{
    int Id { get; set; }
    string Name { get; set; }
}

private void CategoryComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{         
    var catName = (e.AddedItems[0] as IItem).Name;
    vm.SelectedCategory = vm.CategoryList.Where(w => w.Name == catName).Select(s => s.Id).FirstOrDefault();
}

    public void LoadLanguageList()
    {            
        LanguageList = Repository.Current.GetLanguageList();
        _selectedLanguage = LanguageList.FirstOrDefault(i => i.Id == 1);
        RaisePropertyChangedEvent(nameof(SelectedLanguage));
    }

В верхнем коде вы можете увидеть, как я пытаюсь связать, затем выбрано свойство коллекциисвойство элемента и тип элементов в качестве интерфейса.

Я знаю, что невозможно создать экземпляр интерфейса, но я не знаю, является ли объект привязки такого типа неправильным.Но я попытался привязать класс объекта другого типа, который реализует этот интерфейс, и результат был таким же.

1 Ответ

2 голосов
/ 26 апреля 2019

SelectedCategory= CategoryList [0];

vm.SelectedCategory = vm.CategoryList.Where(w => w.Name == catName).FirstOrDefault();

эти 2 нужно изменить

Примечание: вам не нужно создавать событие для SelectionChanged. если элемент изменяется в пользовательском интерфейсе, он автоматически присваивается SelectedCategory, если я предполагаю, что вы используете MVVM, поэтому вы устанавливаете контекст данных

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