C# 已激发PropertyChanged事件,但值尚未';不改变

C# 已激发PropertyChanged事件,但值尚未';不改变,c#,uwp,uwp-xaml,C#,Uwp,Uwp Xaml,我有一个由另一个控件动态创建的自定义控件,我想基于父控件的VisualState更改其VisualState。 VisualState是一个接受枚举数的DependencyProperty,控件在OnPropertyChange事件内部使用它来更改大小和内部布局。 属性在两个控件上都是相同的(当然除了类型) 父控件动态分配组件并将其VisualState绑定到新控件VisualState: CounterControl cc = new CounterControl(); cc.SetBindi

我有一个由另一个控件动态创建的自定义控件,我想基于父控件的VisualState更改其VisualState。 VisualState是一个接受枚举数的
DependencyProperty
,控件在
OnPropertyChange
事件内部使用它来更改大小和内部布局。 属性在两个控件上都是相同的(当然除了类型)

父控件动态分配组件并将其VisualState绑定到新控件VisualState:

CounterControl cc = new CounterControl();
cc.SetBinding(CounterControl.ValueProperty, new Binding() { Path = new PropertyPath(nameof(Counter.Amount)), Source = counter, Mode = BindingMode.TwoWay });
//cc.DataContext = this;//I tried with it, but it doesn't change a thing
cc.SetBinding(CounterControl.VisualStateProperty, new Binding() { Path = new PropertyPath(nameof(VisualState)), Source = this, Mode = BindingMode.OneWay });
属性绑定到Counter.Amount时没有任何问题,并且看起来VisualState也一样

但是当父项发生更改时,会调用
OnVisualState
方法,而子项值则不会发生更改

更新:我按照@EdPlunkett的建议调试了绑定,得到了以下消息:

错误:转换器未能将类型“Windows .Fun.INT32”的值转换为“控件大小”类型;p>


ControlSize
是可枚举的,因此它应该能够将其转换。

发生这种情况是因为它无法将
Int32
转换为可枚举(即使源是相同的可枚举)

我解决了创建一个
IValueConverter
来转换Int32/ControlSize类型并将其分配给绑定的问题

Binding visualStateBinding = new Binding() { Path = new PropertyPath(nameof(VisualState)), Source = this, Mode = BindingMode.OneWay, Converter = new ControlSizeConverter() };

这与DataContext无关。这就是人们告诉天真的新XAML用户到处设置
DataContext=This
的结果。完全疯狂。狗和猫。天哪!试着在行为不端的绑定上加把劲,看看运行时在调试跟踪中得到了什么。@EdPlunkett我知道,我之所以包含这条评论,是因为在我搜索解决方案时发现的许多问题中,很多评论都提到了这一点。我只是想阻止这样的评论。
PresentationTraceSources
似乎不存在于UWP项目中。我找不到有效的替代品。你有吗?我没有做UWP,但我发现:
Binding visualStateBinding = new Binding() { Path = new PropertyPath(nameof(VisualState)), Source = this, Mode = BindingMode.OneWay, Converter = new ControlSizeConverter() };