"Binding" wpf Combox selectedValue to an integer?

本文关键字:quot an to integer Combox Binding wpf selectedValue | 更新日期: 2023-09-27 18:13:59

我刚刚开始了一个新的wpf项目,希望我可以学习一种新的技术,而不是一直使用winForms。

我似乎有太多的困难将一个组合框的选定值绑定到一个整数变量在我的"MainWindow"类。

我一直在看许多"简单"的例子从网站像codeproject,但他们似乎都太复杂了,只是返回一个组合框的选择值。我习惯设置"SelectedValueChanged"属性,只设置一个变量,只需点击几下,如下所示:

public int value;
public void comboBox_SelectedValueChanged()
{
    value = comboBox.SelectedValue();
}

是否有类似的甜蜜,简单和简短的方法来正确地"绑定"所选的组合框项到一个整数?

我试图了解如何使用INotifyPropertyChanged,但我不断得到错误,当我试图使用它。这是我到目前为止所拥有的,但说实话,我不确定我要去哪里:

    // Combo Box Value
public class ComboValue
{
    #region Members
    int valueToReturn;
    #endregion 
    # region Properties
    public int numWeeks
    {
        get { return valueToReturn; }
    }
    #endregion
}
// Veiw Model Class
public class ComboValueViewModel:INotifyPropertyChanged
{
    #region Construction
    public ComboValueViewModel()
    {
    }
    #endregion
}

和我以前从未使用过的"#region",我不知道那是什么。

如果我走在正确的道路上,有人能告诉我吗?

"Binding" wpf Combox selectedValue to an integer?

你没有提到你对MVVM了解多少,但这就是。您的视图将有一个关联的ViewModel类。在这里,你将公开一个包含要绑定到组合框的项的属性,例如:

public List<ComboValue> ComboItems { get; set; }

如果你在VM的构造函数中填充这个属性,那么List<>可能就足够了;然而,你会经常看到ObservableCollection<>用于这类事情——如果你需要在VM代码中添加或删除项目,它就会发挥作用——你的视图会对这些变化做出反应,并相应地更新列表。对于List<>,这不会发生。

对于INotifyPropertyChanged,我没有在上面的代码片段中实现这个模式。同样,如果您在VM构造函数中填充集合,并且不会再次重新分配该属性,则不是严格必要的。但是,在VM属性上使用INPC模式是一种很好的做法。如果没有它,如果你要在代码的其他地方重新分配该属性,例如:-

ComboItems = aNewListOfItems;

则视图不会知道属性更改,并且ComboBox不会更新。如果你需要这种情况发生,那么在属性上实现INPC模式,例如:-

public List<ComboValue> ComboItems   // or ObservableCollection<ComboValue>
{
    get 
    { 
        return _comboItems;
    }
    set
    {
        if (_comboItems != value)
        {
            _comboItems = value;
            OnPropertyChanged("ComboItems");
        }
    }
}

当你在使用一个组合框时,你的VM也应该公开一个你绑定到控件的SelectedItem属性的属性。这个属性应该实现INPC,例如:-

public ComboValue SelectedItem
{
    get 
    { 
        return _selectedItem;
    }
    set
    {
        if (_selectedItem != value)
        {
            _selectedItem = value;
            OnPropertyChanged("SelectedItem");
        }
    }
}

当你在组合中选择项目时,VM的SelectedItem属性将改变以反映当前选择。

最后,你的XAML应该看起来像这样:-

<ComboBox ItemsSource="{Binding ComboItems}" SelectedItem="{Binding SelectedItem}" />

希望这能给你一点关于WPF绑定的"入门"!(代码片段取自内存,所以可能不是100%正确!)。

编辑你的ComboValue类公开了一个numWeeks属性。目前,您可能会发现您的ComboBox显示一个ComboValue类型名称列表。要显示该数字,最简单的方法就是在类中重写.ToString()并返回numWeeks的值。对于像这样的控件中更高级的项格式,您通常会指定ItemTemplate(同样,可以通过Google找到大量示例!)。