gpt4 book ai didi

wpf - 何时使用 WPF 依赖属性与 INotifyPropertyChanged

转载 作者:行者123 更新时间:2023-12-03 07:55:11 26 4
gpt4 key购买 nike

人们对何时触发一个简单的 .NET 属性有任何指导吗INotifyPropertyChanged.PropertyChanged在 View 模型中就足够了吗?那么你什么时候想升级到一个完整的依赖属性呢?还是 DPs 主要用于 View ?

最佳答案

有几种方法:

1.依赖属性

当您使用依赖属性时,它在具有视觉外观(UIElement s)的元素类中最有意义。

优点:

  • WPF 为你做逻辑工作
  • 像动画这样的一些机制只使用依赖属性
  • '适合' ViewModel 样式

  • 缺点:
  • 您需要导出表格 DependencyObject
  • 简单的东西有点尴尬

  • 样本:
    public static class StoryBoardHelper
    {
    public static DependencyObject GetTarget(Timeline timeline)
    {
    if (timeline == null)
    throw new ArgumentNullException("timeline");

    return timeline.GetValue(TargetProperty) as DependencyObject;
    }

    public static void SetTarget(Timeline timeline, DependencyObject value)
    {
    if (timeline == null)
    throw new ArgumentNullException("timeline");

    timeline.SetValue(TargetProperty, value);
    }

    public static readonly DependencyProperty TargetProperty =
    DependencyProperty.RegisterAttached(
    "Target",
    typeof(DependencyObject),
    typeof(Timeline),
    new PropertyMetadata(null, OnTargetPropertyChanged));

    private static void OnTargetPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
    Storyboard.SetTarget(d as Timeline, e.NewValue as DependencyObject);
    }
    }

    2. System.ComponentModel.INotifyPropertyChanged

    通常,在创建数据对象时,您会使用这种方法。对于类似数据的东西来说,这是一个简单而整洁的解决方案。

    优点和缺点 - 对 1 的补充。您只需要实现一个事件 (PropertyChanged)。

    样本:
    public class Student : INotifyPropertyChanged 
    {
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(PropertyChangedEventArgs e)
    {
    if (PropertyChanged != null)
    PropertyChanged(this, e);
    }
    }

    private string name;
    public string Name;
    {
    get { return name; }
    set {
    name = value;
    OnPropertyChanged(new PropertyChangedEventArgs("Name"));
    }
    }

    3.PropertyNameChanged

    为具有指定名称(例如 NameChanged)的每个属性引发事件。事件必须具有此名称,由您来处理/提升它们。与2类似的方法。

    4.获取绑定(bind)

    使用 FrameworkElement.GetBindingExpression()你可以得到 BindingExpression目的
    并调用 BindingExpression.UpdateTarget()刷新。

    第一个和第二个最有可能取决于您的目标。

    总而言之,这是视觉与数据。

    关于wpf - 何时使用 WPF 依赖属性与 INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3551204/

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