WPF自定义控件,DependencyProperty问题我已经设置了自定义控件的测试代码://////UCTest.xaml的交互逻辑///publicpartialclassUCTest:UserControl{publicstaticreadonlyDependencyPropertyLastNameProperty=DependencyProperty.Register("LastName",typeof(string),typeof(UCTest),newPropertyMetadata("NoName",LastNameChangedCallback,LastNameCoerceCallback),LastNameValidateCallbackName);privateLaststaticDependencyObjectobj,DependencyPropertyChangedEventArgse){Console.WriteLine(e.OldValue+""+e.NewValue);}}privatestaticobjectLastNameCoerceCallback(DependencyObjectobj,objecto){strings=oasstring;如果(s.Length>8)s=s.Substring(0,8);返回s;}privatestaticboolLastNameValidateCallback(对象值){返回值!=null;}publicstringLastName{get{return(string)GetValue(LastNameProperty);}set{SetValue(LastNameProperty,value);}}公共UCTest(){初始化组件();XAML代码没什么特别的:我的视图模型中的代码:publicstringLastName{get{return(string)GetValue(LastNameProperty);}set{SetValue(LastNameProperty,value);}}}MainWondow.XAML.cs中的代码:publicMainWindow(){InitializeComponent();varviewModel=newViewModel();DataContext=视图模型;viewModel.LastName="asdf";viewModel.LastName="56udfh";viewModel.LastName="09ualkja";}MainWindow.XAML代码:我设置了一个断点并设置为“WhenHit”输出(如下所示)显示仅在最后一次执行“LastName”时调用的属性。我希望它可以在每次执行时调整使用更改......任何想法为什么?:CustomControlTest.UCTest.LastNameValidateCallback(object),线程:0x1DDC主线程函数:CustomControlTest.UCTest.LastNameValidateCallback(object),线程:0x1DDC主线程函数:CustomControlTest.UCTest.LastNameValidateCallback(object),线程:0x1DDC主线程函数:CustomControlTest.UCTest.LastNameCoerceCallback(System.Windows.DependencyObject,object),线程:0x1DDC主线程函数:CustomControlTest.UCTest.LastNameValidateCallback(object),线程:0x1DDC主线程函数:CustomControlTest.UCTest.LastNameValidateCallback(object),线程:0x1DDCMain线程函数:CustomControlTest.UCTest.LastNameCoerceCallback(System.Windows.DependencyObject,object),线程:0x1DDC主线程函数:CustomControlTest.UCTest.LastNameChangedCallback(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs),Thread:0x1DDCMainThreadNoName09ualkja谢谢,PS,这是我之前帖子的后续问题Thoughtidstartanewoneastherealproblemiswithme原始帖子无关紧要。?您的控件未加载到MainWindow构造函数中,因此尚未建立Binding。您可以通过在最后一个赋值、更改处理程序和构造函数的末尾设置断点来检查这一点。在UCTest的属性更改之前,您将看到构造函数完成。使用Dispatcher延迟分配可以解决这个问题:以上就是C#学习教程的全部内容:WPF自定义控件,DependencyProperty问题分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—this.Dispatcher.BeginInvoke((Action)(()=>{viewModel.LastName="asdf";viewModel.LastName="56udfh";viewModel.LastName="09ualkja";}),DispatcherPriority.DataBind);网络收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
