:定位:
我需要将类绑定到组合框并在其中显示一个字符串值(名称)。
问题:
如果使用Observablecollection
类创建DataContract
,则组合框(下拉列表)不会显示任何值。
其他信息:
如果我使用一个简单的类而不是DataContract一切正常!
我不想重新创建Objective
和其他类,重复代码是坏事。
代码:
服务:
[DataContract]
public class Objective
{
/// <summary>
/// Objective constructor
/// </summary>
public Objective()
{
}
[DataMember]
public int ID
{
get;
set;
}
[DataMember]
public string Name
{
get;
set;
}
[DataMember]
public string Description
{
get;
set;
}
}
Client- ViewModel:
public class SomeViewModel : INotifyPropertyChanged
{
private ObservableCollection<Objective> _objectiveList;
public SomeViewModel()
{
this._objectiveList = new ObservableCollection<Objective>()
{
new Objective {
Name="Task1"
},
new Objective {
Name="Task2"
},
new Objective {
Name="Task3"
},
};
}
public ObservableCollection<Objective> ObjectiveList
{
get
{
return this._objectiveList;
}
set
{
this._objectiveList = value;
}
}
}
Client- Window.Xaml
<ComboBox Grid.Row="0" x:Name="cbxTaskList" DisplayMemberPath="Name"
ItemsSource="{Binding Path=ObjectiveList, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">
<ComboBox.Text>
<Binding Path="SelectedObjective" UpdateSourceTrigger="PropertyChanged"/>
</ComboBox.Text>
<ComboBox.SelectedItem>
<Binding Path="SelectedObjective" UpdateSourceTrigger="PropertyChanged"/>
</ComboBox.SelectedItem>
</ComboBox>
修改
我忘记了menthion我正在为我的视图模型实现INotifyPropertyChanged
。如果我使用简单的类(不是DataContract类),一切正常。
答案 0 :(得分:2)
您似乎需要为INotifyPropertyChanged
类实现SomeViewModel
接口。虽然ObservableCollection
是一个很好的选择,但是在执行以下操作时不会修改XAML代码:
set
{
this._objectiveList = value;
}
取而代之的是:
set
{
this._objectiveList = value;
PropertyChanged("ObjectiveList");
}
有关INotifyPropertyChanged
实施详情,请参阅 the documentation。