【发布时间】:2013-11-07 01:49:45
【问题描述】:
我的 ComboBox 中的 SelectedItem 有问题。
<ComboBox Name="cbxSalesPeriods"
ItemsSource="{Binding SalesPeriods}"
DisplayMemberPath="displayPeriod"
SelectedItem="{Binding SelectedSalesPeriod}"
SelectedValuePath="displayPeriod"
IsSynchronizedWithCurrentItem="True"/>
如果我打开 ComboBox,我会看到值。
如果我选择一个项目,所选项目将不会显示。
有人有想法吗?
在我的 ViewModel 中,我有这两个属性:
public ObservableCollection<SalesPeriodVM> SalesPeriods { get; private set; }
private SalesPeriodVM selectedSalesPeriod;
public SalesPeriodVM SelectedSalesPeriod
{
get { return selectedSalesPeriod; }
set
{
if (selectedSalesPeriod != value)
{
selectedSalesPeriod = value;
RaisePropertyChanged("SelectedSalesPeriod");
}
}
}
这些是该类的一些属性:
public SalesPeriodVO Vo
{
get { return period; }
}
public int Year
{
get { return period.Year; }
set
{
if (period.Year != value)
{
period.Year = value;
RaisePropertyChanged("Year");
}
}
}
public int Month
{
get { return period.Month; }
set
{
if (period.Month != value)
{
period.Month = value;
RaisePropertyChanged("Month");
}
}
}
public string displayPeriod {
get
{
return this.ToString();
}
}
public override string ToString()
{
return String.Format("{0:D2}.{1}", Month, Year);
}
编辑: 如果我删除属性 DisplayMemberPath,会发生以下情况:
【问题讨论】:
-
您应该创建一个沙盒应用程序。只留下一个组合框,你的 viemodels 删除其他所有内容。然后你应该尝试重现这个问题。你可能无法做到。然后比较这两个应用程序,看看哪个差异会导致这种行为。我怀疑问题出在您提供的代码中。另请注意,您的组合框有一个名称。查看代码隐藏文件,看看是否有一些代码与选择有关。
标签: c# wpf data-binding mvvm binding