【发布时间】:2015-04-11 20:06:30
【问题描述】:
目标:
我需要将类绑定到组合框并在其中显示一个字符串值(名称)。
问题:
如果 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;
}
}
}
客户端-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>
编辑:
我忘了提到我正在为我的视图模型实现INotifyPropertyChanged。此外,如果我使用简单的类(不是 DataContract 类),一切正常。
【问题讨论】:
-
对我来说看起来不错,即使您的 ViewModel 没有实现
INotifyPropertyChanged,您也应该在组合框中看到 Task1、Task2、Task3,唯一的原因一定是您的DataContext是未设置为SomeViewModel的实例 -
我还设置了
DataContext像这样 -> `this.DataContext = SomeViewModel.Instance;` 我在同一个窗口中有 2 个相同的下拉菜单,我注意到的一个区别是一个类在客户端的服务和其他(正在工作的)中实现。 @decoherence -
我发现问题出在哪里......我已经实现了一些逻辑,从服务器获取任务,然后再清除该列表。由于没有从服务器添加到列表的任务,因此下拉列表为空......感谢您的帮助,我可能会删除这个问题。 :D @decoherence
-
很高兴它成功了,大多数时候问题比你想象的要简单
标签: c# wpf wcf observablecollection