SelectedItem和SelectedValue返回错误的项目

时间:2014-09-06 14:17:04

标签: c# wpf xaml mvvm

我有List<string> MyList有4个值。这些显示在ComboBox控件中。绑定在我的MVVM WPF项目中完美运行。

我还有string SelectedMyList绑定到我的XAML并且应该显示所选项目。我遇到的问题是,无论使用SelectedItem 还是 SelectedValue,它总是会传递MyList中的第一项

private MyClass()//constructor
{
    MyList = new List<string>() {"Hi", "Bye", "Hello", "See ya"}; 
}

private string _selectedMyList;
public string SelectedMyList
{
    get
    {
        return this._selectedMyList;
    }
    set
    {
        //value is always Hi
        if (this._selectedMyList== value)
            return;

        this._selectedMyList= value;
        OnPropertyChanged("SelectedMyList");
    }
}

private List<string> _myList;
public List<string> MyList
{
    get
    {
        return this._myList;
    }
    set
    {
        if (this._myList== value)
            return;

        this._myList= value;
        OnPropertyChanged("MyList");
    }
}

和我的XAML

<ComboBox ItemsSource="{Binding MyList}" SelectedValue="{Binding SelectedMyList, UpdateSourceTrigger=PropertyChanged}" />

输出窗口中没有错误/绑定错误等。

为什么SelectedItem / SelectedValue没有通过我认为是ComboBox中所选项目的内容?

2 个答案:

答案 0 :(得分:0)

这适合我。

  private string _selectedMyList;
    public string SelectedMyList
    {
        get
        {
            return this._selectedMyList;
        }
        set
        {
            //value is always Hi
            if (this._selectedMyList != value)
            {
                this._selectedMyList= value;
                OnPropertyChanged("SelectedMyList");
            }
        }
    }

    private List<ObservableCollection> _myList;
    public ObservableCollection<string> MyList
    {
        get
        {
            return this._myList;
        }
        set
        {
            if (this._myList== value)
            {
                this._myList= value;
                OnPropertyChanged("MyList");
            }
        }
    }

的Xaml:

<ComboBox ItemsSource="{Binding MyList}" 
          SelectedItem="{Binding SelectedMyList}" 
          IsSynchronizedWithCurrentItem="True"/>

答案 1 :(得分:0)

如果要使用SelectedValue属性,则需要将其与SelectedValuePath属性一起使用。 See this link to a similar question