ComboBox

时间:2016-07-18 13:34:09

标签: c# wpf binding

我试图设置ComboBox的默认值。我在布局中使用绑定,我不确定如何绑定它。这是我的viewModel

public class ViewModel : INotifyPropertyChanged
{
    private Sklady sklady = null;

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    public Sklady Sklady
    {
        get
        {
            return this.sklady;
        }
        set
        {
            this.sklady = value;
            NotifyPropertyChanged("Sklady");
        }
    }
}

我如何将数据设置为viewModel

private void comboBoxSklad_Loaded(object sender, RoutedEventArgs e)
{
    //get some data
    prijemWindow.viewModel.Sklady = sklady;
    prijemWindow.viewModel.Sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD;
}

我的viewModel使用此类获取值:

[DataContract]
public class Sklady
{
    [DataMember]
    public List<Sklad> sklady { get; set; }
    [DataMember]
    public String skladID { get; set; }

    public class Sklad
    {
        public string ID { get; set; }
        public string NAME { get; set; }
        public string CODE { get; set; }
    }
}

这是当前的xaml代码:

<ComboBox Name="comboBoxSklad" Loaded="comboBoxSklad_Loaded" ItemsSource="{Binding Sklady.sklady}" DisplayMemberPath="CODE"
        SelectedValuePath="ID" SelectedItem="{Binding Sklady.skladID}"/>

数据已正确绑定到ComboBox,我可以看到来自sklady List的数据。但我想将ComboBox默认值设置为skladID值。我该怎么办?

ANSWER

得到Klaus Byskov Pedersen的答案我认为它有效......首先,我使用SelectedValue代替SelectedItem ...然后,我在构造函数{{}中使用Sklady 1}}并且最后更改了行:

prijemWindow.viewModel.Sklady = new Sklady();prijemWindow.viewModel.Sklady = new Sklady();

非常感谢!

1 个答案:

答案 0 :(得分:2)

使用SelectedValue代替SelectedItem

<ComboBox Name="comboBoxSklad" Loaded="comboBoxSklad_Loaded" ItemsSource="{Binding Sklady.sklady}" DisplayMemberPath="CODE"
    SelectedValuePath="ID" SelectedValue="{Binding Sklady.skladID}"/>

使用SelectedItem时,绑定项的类型为Sklady,而不是string

修改`

prijemWindow.viewModel.Sklady = sklady;
prijemWindow.viewModel.Sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD;

当你设置NotifyPropertyChanged时,你有一个viewModel.Sklady,但是当你被解雇时,你还没有设置skladID,所以请尝试更改这两个语句的顺序。