简体   繁体   English

ComboBox中的默认选定值

[英]Default selected value in ComboBox

Im trying to set default value of ComboBox . 我试图设置ComboBox默认值。 I'm using binding in layout and I'm not sure how bind it right. 我在布局中使用绑定,但不确定如何正确绑定。 Here is my viewModel : 这是我的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");
        }
    }
}

How I am set data to viewModel : 我如何将数据设置为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;
}

My viewModel use this class to get values: 我的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; }
    }
}

And this is current xaml code: 这是当前的xaml代码:

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

Data are binded into ComboBox correctly and I can see data from sklady List . 数据正确绑定到ComboBox ,我可以从sklady List看到数据。 But I would like to set the ComboBox default value to skladID value. 但是我想将ComboBox默认值设置为skladID值。 How can I do it? 我该怎么做?

ANSWER 回答

With answer from Klaus Byskov Pedersen I get it work... First, I use SelectedValue instead of SelectedItem ... Then, I ininialize Sklady in constructor prijemWindow.viewModel.Sklady = new Sklady();prijemWindow.viewModel.Sklady = new Sklady(); 从回答Klaus Byskov Pedersen我得到它的工作。首先,我用SelectedValue代替SelectedItem ......然后,我ininialize Sklady在构造函数中prijemWindow.viewModel.Sklady = new Sklady();prijemWindow.viewModel.Sklady = new Sklady(); and at the end, changed lines : 最后,更改了行:

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

Thanks a lot! 非常感谢!

Use SelectedValue instead of SelectedItem . 使用SelectedValue而不是SelectedItem

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

When using SelectedItem the bound item would be of type Sklady , not string . 使用SelectedItem ,绑定项的类型Sklady ,而不是string

EDIT ` 编辑 `

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

You have a NotifyPropertyChanged when you set viewModel.Sklady but at the time this is fired, you have not yet set the skladID so try changing the order of those two statements. 你有NotifyPropertyChanged当您设置viewModel.Sklady但在这个被解雇的时候,你还没有设置skladID所以尝试改变这两个语句的顺序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM