【发布时间】:2021-04-16 19:28:23
【问题描述】:
我正在尝试实现自定义边框,它绑定到 ViewModel 中的 bool 属性,并且每当这个属性发生变化时,我想用边框做一些动画。
ViewModel 属性有 OnPropertyChanged 接口,看起来像这样:
public bool Enable_control
{
get { return _enable_ctl; }
set { _enable_ctl = value; OnPropertyChanged(); }
}
private bool _enable_ctl;
这就是我在 xaml 中绑定自定义边框的方式:
<cust_border:Border_slide ShowSlide={Binding Enable_control}"/>
这是我的自定义边框控制代码:
public class Border_slide : Border
{
public Border_slide()
{
}
public bool ShowSlide
{
get { return (bool)GetValue(ShowSlideProperty); }
set { SetValue(ShowSlideProperty, value);}
}
public static readonly DependencyProperty ShowSlideProperty =
DependencyProperty.Register("ShowSlide", typeof(bool), typeof(Border_slide), new
FrameworkPropertyMetadata(true, new PropertyChangedCallback(ShowSlideChanged)));
private static void ShowSlideChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//I would like to do animation of control when property of ViewModel changes - presumably here,
//but PropertyChangedCallback gets triggered only once - not on every Enable_control change!
}
}
所以,问题是:如何从 Viewmodel 属性更改中正确更新 UserControl 的依赖属性,以便接下来对 UserControl 做一些事情?
【问题讨论】:
-
ShowSlideChanged 在 ShowSlide 更改其值时调用,即只要 Enable_control 更改其值。你到底在挣扎什么?请详细说明属性更改时控件应该发生的确切情况。
-
@Clemens,对我来说不是,我不知道为什么。如果我在 ShowSlideChanged 中设置断点,它只会在 Viewmodel 中的属性更改一次时停止。例如。我的启用,控件在启动时具有真值,当它得到假值时,我会收到通知。但是当 Enable_control 取回真正的值时,什么也没有发生。
-
@Clemens,我想做的只是一个边框的边距动画——从左到右,当属性改变时向后。我可以让它在一个方向上工作,但不能向后工作,因为 SlideChanged 不再更新。我的动画代码也在那里。
-
从您在此处显示的内容,我们无法判断。看起来一切正常。也许您正在其他地方设置 ShowSlide 属性,这会覆盖 Binding。只是猜测。
标签: c# wpf binding dependency-properties inotifypropertychanged