将WPF组合框与更改的集合绑定

时间:2016-04-06 07:48:21

标签: wpf data-binding combobox

我在列表中有一个组合框,其中组合框的项目是动态的。它们将在所选项目的帮助下确定。

例如:如果选择的项目是Item1,那么组合框应包含Item1,Item2,Item3,但如果选择的项目是Item2,则组合框应包含Item2,Item3,Item4

如何通过使用绑定来实现相同的目标..

现在我在我的集​​合中设置两个名为SelectedValue和ListValues的属性,并将它们与我的组合框绑定,但它只选择列表中的第一项,并将其余项保留原样。

                                                        

此外,数据绑定的执行顺序是什么,因为我想首先调用Itemsource然后设置selectedvalue,以便选择项目。

非常感谢任何帮助。

这是我努力的结果,但我不确定它是否正确。

C#

public string SelectedValue
{
    get
    {
        PropertyChanged.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs("Values"));
        return _value;
    }
    set
    {
        if (value != null) //It will be null when binding of values happens
        { 
            _value = value;
            PropertyChanged.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs("Values"));
            PropertyChanged.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs("SelectedValue"));
        }
    }
}

public IList<SomeType> Values
{
    get
    {
        string status =_status;
        return SomeFunctionToReturnValues(status);
    }
}

XAML

<ComboBox SelectedValue="{Binding SelectedValue}" SelectedValuePath="Id" DisplayMemberPath="Text" Width="120" ItemsSource="{Binding Values,Mode=OneWay}"></ComboBox>

如果有人能在这里提供更好的建议,请发表评论并告诉我。

1 个答案:

答案 0 :(得分:1)

您使用ItemsSource属性

<ComboBox SelectedItem="{Binding MyNum}" ItemsSource="{Binding Numbers}" Width="100" Height="30"/>

这必然会:

// Fills up combo box
public IEnumerable<int> Numbers
{
    get
    {
        IEnumerable<int> temp = MyCollection.ToList(); 
        return temp.SubArray(MyNum,MyCollection.count);
    }
}

private int _myNum
public int MyNum
{
    get
    {
        return  _myNum;
    }
    set
    {
        _myNum = value;
        OnPropertyChanged("MyNum");
    }
}

当SubArray是(Credit

public static T[] SubArray<T>(this T[] data, int index, int length)
{
    T[] result = new T[length];
    Array.Copy(data, index, result, 0, length);
    return result;
}
相关问题