gpt4 book ai didi

c# - 通过我自己的代码检测对 DependencyProperty 的更改

转载 作者:行者123 更新时间:2023-12-05 07:57:36 26 4
gpt4 key购买 nike

我的控件有一个映射到私有(private)变量的属性。设置属性时,我还需要存储某个其他变量。当属性的私有(private)变量由我自己的控制代码设置时,一定不会出现这种特殊处理。一切顺利。

我现在需要将其重构为 DependencyProperty。我这里只有一个更改处理程序,对该属性的所有(包括内部)访问都必须通过 DependencyProperty 框架。没有更多我可以直接设置的私有(private)变量。我自己的代码所做的每项更改现在看起来与来自外部源(例如控件的用户或数据绑定(bind))的更改完全相同。

在我的属性更改处理程序中,如何确定值更改是来 self 的代码还是其他地方?

这是旧代码:

private DateTime selectedTime;
private int intendedDay;

public DateTime SelectedTime
{
get { return selectedTime; }
set
{
selectedTime = value;
intendedDay = selectedTime.Day;
}
}

在这段代码中,我可以直接设置selectedTime,而不影响intendedDay,只有在为SelectedTime 分配一个新值时才必须设置intendedDay从外面,或者当我认为适合我的控制时。

DependencyProperty 只允许我检测任何更改:

public static DependencyProperty SelectedTimeProperty = DependencyProperty.Register(
"SelectedTime",
typeof(DateTime),
typeof(DateTimeTextBox),
new PropertyMetadata(SelectedTimeChanged));

public DateTime SelectedTime
{
get { return (DateTime) GetValue(SelectedTimeProperty); }
set { SetValue(SelectedTimeProperty, value); }
}

private static void SelectedTimeChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
DateTimeTextBox control = (DateTimeTextBox) obj;
// This must not happen where I previously assigned the private variable:
control.intendedDay = control.SelectedTime.Day;
}

private int intendedDay;

所以当我以前分配私有(private)变量时,我现在只能设置依赖属性,这也会更改 intendedDay

最佳答案

为什么不将依赖属性包装在普通属性中?设置该属性仍将设置依赖属性,设置私有(private)属性将不会设置 intendedDay 值。

private DateTime selectedTime
{
get { return (DateTime) GetValue(SelectedTimeProperty); }
set { SetValue(SelectedTimeProperty, value); }
}

public DataTime SelectedTime
{
get { return selectedTime; }
set
{
selectedTime = value;
intendedDay = selectedTime.Day;
}
}

关于c# - 通过我自己的代码检测对 DependencyProperty 的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com