簡體   English   中英

ComboBox中的SelectedItem綁定

[英]SelectedItem binding in ComboBox

我綁定到ComboBox的SelectedItem屬性時遇到問題。

應用程序中有一個ObservableCollection,它綁定到ItemsSource屬性,另一個對象字段是我要綁定到SelectedItem屬性。

但是由於目標調用異常,應用程序甚至無法啟動。

我不知道,將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));
    }

在代碼上方,您可以看到方式,我如何嘗試進行綁定,然后可以將collection屬性,selected item屬性和項目類型作為界面。

我知道,不可能創建接口的實例,但是我不知道這種類型的綁定對象是否不正確。 但是我試圖綁定到另一種對象類型的類,該對象類型實現了此接口,結果是相同的。

SelectedCategory= CategoryList [0];

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

這兩個需要更改

注意:您不必為SelectionChanged創建事件。 如果在ui中更改了該項目,它將假定您使用MVVM 自動分配給SelectedCategory因此您可以設置數據上下文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM