使用依赖性 属性 绕过 '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,鉴于它引导你的代码到。)
我有一个字符串 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,鉴于它引导你的代码到。)