我刚开始一个新的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"之前,我不知道那是什么。
如果我在这里走正路,有人可以填补我吗?
答案 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找到大量示例!)。