“绑定”wpf Combobox selectedValue为整数?

时间:2014-07-21 14:18:39

标签: c# wpf mvvm combobox

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

我似乎很难将comboBox的选定值绑定到我的" MainWindow"中的整数变量。类。

我一直在寻找一大堆简单的"来自codeproject等网站的示例,但它们似乎都太复杂了,无法返回comboBox的选定值。我习惯于设置" SelectedValueChanged"属性,只需设置一个变量,只需点击几下,如下所示:

public int value;

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

是否有类似的甜蜜,简单和简短的方法来正确地约束"选定的comboBox项为整数?

我试图了解如何使用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"之前,我不知道那是什么。

如果我在这里走正路,有人可以填补我吗?

1 个答案:

答案 0 :(得分:0)

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

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

如果在VM的构造函数中填充此属性,则List&lt;&gt;可能就足够了;但是,您经常会看到ObservableCollection<>用于此类事情 - 如果您需要在VM代码中添加或删除项目,则会出现这种情况 - 您的视图会对此类更改做出反应并更新列表因此。这不会发生在列表&lt;&gt;。

至于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");
        }
    }
}

当您使用ComboBox时,您的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}" />

希望这会给你一点&#34;引物&#34;进入WPF绑定! (从内存中获取的代码片段可能不是100%正确!)。

修改 您的ComboValue类公开numWeeks属性。就目前而言,您可能会发现您的ComboBox显示ComboValue类型名称列表。要显示数字,最简单的方法就是覆盖类中的.ToString()并返回numWeeks的值。对于此类控件中项目的更高级格式设置,您通常会指定ItemTemplate(同样,可以通过Google找到大量示例!)。