使用依赖性 属性 绕过 'Cannot access non-static property in static context' 的另一种方法

An alternative way around 'Cannot access non-static property in static context' using dependency property

我有一个字符串 source,我试图从我的 xaml 读入我的视图并分配给 DependencyProperty。我收到一个错误 Cannot access non-static property 'Source' in static context,我理解这个错误,但我不知道如何解决它。如果有人可以建议我如何将 Source 更新为 source 的值,请

public string Source
{
    get { return (string)GetValue(SourceProperty); }
    set { SetValue(SourceProperty, value); }
}

public static readonly DependencyProperty SourceProperty = 
    DependencyProperty.Register(
            nameof(Source),
            typeof(string),
            typeof(TagsIndicator),
            new PropertyMetadata(null, ReadInSource));            

private static void ReadInSource(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
     string source = e.NewValue.ToString();

     Source = source; // Error here: Cannot access non-static property 'Source' in static context
}

从字面上理解你的问题,你只需要为方法转换 d 参数:

private static void ReadInSource(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TagsIndicator tagsIndicator = (TagsIndicator)d;
    string source = e.NewValue.ToString();

    tagsIndicator.Source = source; // Error here: Cannot access non-static property 'Source' in static context
}

这将使错误消失。

但是!

如果这就是您的回调要做的所有事情,真正的解决方案似乎是删除回调方法(当然,不要将其注册到DependencyProperty).

依赖性 属性 系统的全部意义在于 WPF 代表您管理 属性 值。该回调仅在 属性 已被依赖项 属性 系统更改时调用,例如通过绑定或直接设置 属性 本身(在 属性 setter 中调用 DependencyObject.SetValue())。

再次将 属性 设置为与刚刚设置相同的值,以响应已设置的 属性,不会对我来说似乎很有意义。

除非您在问题中没有描述某些特定需求,否则您可以完全删除该方法。 (即使你确实有这样的需求,你也应该问一个不同的问题,因为看起来你可能会错误地服务 that need,鉴于它引导你的代码到。)