【发布时间】:2011-03-30 18:47:23
【问题描述】:
我有一个实现INotifyPropertyChanged 的视图模型。在这个 viewModel 上有一个名为 SubGroupingView 的属性。此属性绑定到组合框的选定项。当我更改组合框时,源属性更新正常,但是当我更改源属性或控件初始化时,combobox.selectedItem 不反映属性中存在的内容。
以下是一些帮助您入门的代码:
<ComboBox Grid.Column="3" Grid.Row="1"
Margin="0,1,4,1"
SelectedItem="{Binding Path=SubGroupingView, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, diag:PresentationTraceSources.TraceLevel=High}"
ItemsSource="{Binding Columns}"
DisplayMemberPath="DisplayName">
该属性引发PropertyChanged 事件,TraceSource 输出显示绑定检测到它并传输了值,只是组合框没有反映它。任何想法都将受到欢迎!
编辑:
跟踪源的输出是这样的:
System.Windows.Data Warning: 91 : BindingExpression (hash=23631369): Got PropertyChanged event from ReportViewModel (hash=52844413)
System.Windows.Data Warning: 97 : BindingExpression (hash=23631369): GetValue at level 0 from ReportViewModel (hash=52844413) using RuntimePropertyInfo(SubGroupingView): DataColumnViewModel (hash=58231222)
System.Windows.Data Warning: 76 : BindingExpression (hash=23631369): TransferValue - got raw value DataColumnViewModel (hash=58231222)
System.Windows.Data Warning: 80 : BindingExpression (hash=23631369): TransferValue - implicit converter produced DataColumnViewModel (hash=58231222)
System.Windows.Data Warning: 85 : BindingExpression (hash=23631369): TransferValue - using final value DataColumnViewModel (hash=58231222)
这里是源属性的代码:
public class ReportViewModel : ViewModelBase, IReportTemplate
{
public DataColumnViewModel SubGroupingView
{
get
{
return GetViewModel(_report.SubGrouping);
}
set
{
if (_report.SubGrouping == value.ColumnName)
return;
_report.SubGrouping = value.ColumnName;
RefreshDataSeries();
base.OnPropertyChanged("SubGroupingView");
base.OnPropertyChanged("IsReady");
}
}
}
注意:ViewModelBase 实现 INotifyPropertyChange。
回答
我重载了 ==、!= 运算符、GetHashCode() 和 Equals(object),现在它运行良好。感谢您的所有帮助!
【问题讨论】:
-
出于兴趣,请尝试在 XAML 声明中的 SelectedItem 之前设置 ItemsSource。
-
你在跟踪我吗?运气不好
-
有趣...您能否发布您的 ViewModel 的 sn-p(特别是 SubGroupingView 的定义)?
-
如何更改源属性?它真的是列表中的对象,而不是它的任何副本吗?
-
由于它是一种 ViewModel 方法,因此创建了对象。我将尝试使用列表的 Columns 属性
标签: wpf mvvm binding combobox selecteditem