Jie*_*eng 14 c# wpf dependency-properties
我有时认为我可能不必要地使用依赖属性.我什么时候需要使用它?当我有一个依赖于其他属性的属性?假设我有一个Color
属性,我希望它依赖于属性Hue,Saturation,Luminosity我是否使用依赖属性?或者我用什么?Color
当属性Hue,Saturation,Luminosity改变时,我控制那些必须更新的那些.
现在我做的是
public byte Hue {
get { return _hue; }
set
{
if (_hue == value)
return;
_hue = value;
NotifyPropertyChanged("Hue");
NotifyPropertyChanged("Color"); // to update controls bound to color
}
}
Run Code Online (Sandbox Code Playgroud)
但我认为这不是正确的做事方式吗?如果我有更多影响颜色的属性,我将在所有这些属性中增加1行?
Ste*_*rex 21
你应该只DependencyProperty
在你希望能够通过XAML 将其值绑定到某个东西时使用,例如
<local:MyObject MyDependencyProperty="{Binding ...}" />
Run Code Online (Sandbox Code Playgroud)
更新:如下面的Ian所述,如果您希望能够为您的属性设置动画或通过样式设置它,则还需要依赖项属性
如果您不需要以这种方式工作,那么这是不必要的.例如,如果您只想通过XAML将值设置为常量(如下所示),则无需使用DependencyProperty
<local:MyObject MyRegularProperty="Some Value" />
Run Code Online (Sandbox Code Playgroud)
同样,如果要绑定到(例如)视图模型上的属性值:
<TextBlock Text="{Binding MyViewModelProperty}" />
Run Code Online (Sandbox Code Playgroud)
那你就不需要用了DependencyProperty
.如果您实现,INotifyPropertyChanged
那么Text
当属性更改时仍将更新.
编辑:在重新阅读你的问题时,我不确定你的情况是否会受到你是否使用的影响DependencyProperty
- 如果我正确地阅读它,你想要做的只是导致许多属性当其中任何一个属性发生变化时,在UI上更新,对吧?
我认为你现在的实施方式没有任何问题(即PropertyChanged
在每个设定者中引发很多事件),但如果你不热衷于此,那么你可以试着拥有一个暴露相关的单一财产绑定到它的子属性全部计算:
class ColorWrapper
{
public Color Color { get; set; }
public byte Hue
{
get { return this.Color.Hue; } //or however this is calculated
}
Run Code Online (Sandbox Code Playgroud)
然后Color
在ViewModel上有一个属性,它会引发PropertyChanged
事件并通过View绑定到该事件:
<TextBlock Text="{Binding Color.Hue}" />
Run Code Online (Sandbox Code Playgroud)
正如我所说,我不会说这对你已经拥有的东西特别有所改善.
归档时间: |
|
查看次数: |
9938 次 |
最近记录: |