WPF XAML,我有一个自定义控件我已经写了这个包裹查找。 以典型的政府风格,他们有一个查找表,用于所有可能的查找。 我的自定义控件会抛出一个弹出式覆盖图,要求他们从列表中的项目中进行选择。 我的问题与从我的调用表单到我的控件属性到我的基础控制虚拟机的数据绑定有关。WPF自定义控件属性没有收到数据绑定
我打电话这样的控制:
<Controls:LookupSelector SelectedLookupValueId="{Binding Path=DataContext.SelectedHarvestMethod, ElementName=SurveyFormWindow, Mode=TwoWay}" />
(其他垃圾取出) 在这种情况下,需要明确的DataContext因为控制的实际的datacontext是它自己的视图模型。 SelectedHarvestMethod是ViewModel形式的属性。
它以“新窗体”模式工作,其中控件负责设置其自己的值(该控件包含一个按钮,当您单击该按钮时,会弹出一个按钮,并选择所需的查找数据值) 。 正如我所说的那样工作正常,它甚至会绑定回上面代码中的'SelectedHarvestMethod'。我可以使用这个很好,并确信我的ViewModel始终具有分配给该属性的选定ID。
但现在我正在执行“编辑现有表单”模式,我从数据库加载数据并在视图模型中设置属性。因此,我设置了'SelectedHarvestMethod',并且该代码正常工作(setter中的断点),但'SelectedLookupValueId'的结果setter未被调用 - 值永远不会通过。
“SelectedLookupValueId”是在控制的视图模型一个DP:
public static readonly DependencyProperty SelectedLookupValueIdProperty =
DependencyProperty.Register("SelectedLookupValueId", typeof(int), typeof(LookupSelector), new UIPropertyMetadata(0));
public int SelectedLookupValueId
{
get { return (int) GetValue(SelectedLookupValueIdProperty); }
set { SetValue(SelectedLookupValueIdProperty, value); ViewModel.SetPreSelectedLookupValueId(value); }
}
有在输出窗口或事件日志中没有错误,或写在我的鞋的底部。 插入的调试转换器显示整数值被明确分配。 正如评论中提到的那样,虚拟机当然会实现INotifyPropertyChanged,并正确地提升事件。
此外,实际的类型是'用户控制',而不是自定义控制:它涉及到XAML。
为什么不调用我的控件的属性setter?
我应该补充说我在ViewModel上实现了INotifyPropertyChanged,并在设置VM属性时将事件返回。但是,希望这已经很明显,因为我表示DebugConverter正在被击中。 – DarkwingDuck 2009-08-18 07:14:05