我有以下ComboBox从枚举中获取populat:
<ComboBox Name="cmbProductStatus" ItemsSource="{Binding Source={StaticResource statuses}}"
SelectedItem="{Binding Path=Status}" />
请注意,DataContext在代码隐藏中设置。
它甚至不是双向绑定,我有一些Product.Status的默认值,但它永远不会被选中。
更新
我被要求输入我的Status属性的代码。
public class Product {
//some other propertties
private ProductStatus _status = ProductStatus.NotYetShipped;
public ProductStatus Status { get { return _status; } set { value = _status; } }
}
public enum ProductStatus { NotYetShipped, Shipped };
答案 0 :(得分:3)
ComboBox绑定有点棘手。确保在分配DataContext时加载了itemssource,并且使用SelectedItem分配的项目与ItemsSource中的一个项目符合==关系。
答案 1 :(得分:1)
您的状态属性必须通知其更改,并且您的Product类必须实现INotifyPropertyChanged
接口。
这里有属性的MVVM Light代码片段; - )
/// <summary>
/// The <see cref="MyProperty" /> property's name.
/// </summary>
public const string MyPropertyPropertyName = "MyProperty";
private bool _myProperty = false;
/// <summary>
/// Gets the MyProperty property.
/// TODO Update documentation:
/// Changes to that property's value raise the PropertyChanged event.
/// This property's value is broadcasted by the Messenger's default instance when it changes.
/// </summary>
public bool MyProperty
{
get
{
return _myProperty;
}
set
{
if (_myProperty == value)
{
return;
}
var oldValue = _myProperty;
_myProperty = value;
// Remove one of the two calls below
throw new NotImplementedException();
// Update bindings, no broadcast
RaisePropertyChanged(MyPropertyPropertyName);
// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged(MyPropertyPropertyName, oldValue, value, true);
}
}