已触发PropertyChanged事件但值未更改

时间:2017-05-06 21:34:30

标签: c# uwp uwp-xaml

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

public ControlSize VisualState
{
    get { return (ControlSize)GetValue(VisualStateProperty); }
    set
    {
        if (value != VisualState)
        {
            SetValue(VisualStateProperty, value);
        }
    }
}

public static readonly DependencyProperty VisualStateProperty = DependencyProperty.RegisterAttached(nameof(VisualState), typeof(ControlSize), typeof(CountersListControl), new PropertyMetadata(ControlSize.Large, OnVisualStateChanged));

父控件动态分配组件并将其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 });

Value属性在没有任何问题的情况下绑定到Counter.Amount,并且看起来也是VisualState。

但是在更改父级时调用OnVisualState方法,而不更改子级值。

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

  

错误:转换器无法将“Windows.Foundation.Int32”类型的值转换为“ControlSize”类型;

ControlSize是一个可枚举的,所以它应该可以转换它。

0 个答案:

没有答案