Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 另一种解决';无法访问静态上下文中的非静态属性';使用依赖属性_C#_Wpf_Static_Dependency Properties_Non Static - Fatal编程技术网

C# 另一种解决';无法访问静态上下文中的非静态属性';使用依赖属性

C# 另一种解决';无法访问静态上下文中的非静态属性';使用依赖属性,c#,wpf,static,dependency-properties,non-static,C#,Wpf,Static,Dependency Properties,Non Static,我有一个字符串source,我正试图从我的xaml读入到我的视图中,并分配给一个dependencProperty。我遇到一个错误无法在静态上下文中访问非静态属性“Source”,我理解这个错误,但我无法解决如何避免它。如果有人能建议我如何将源代码更新为源代码的值,请 公共字符串源 { 获取{return(string)GetValue(SourceProperty);} set{SetValue(SourceProperty,value);} } 公共静态只读DependencyPropert

我有一个字符串
source
,我正试图从我的xaml读入到我的视图中,并分配给一个
dependencProperty
。我遇到一个错误
无法在静态上下文中访问非静态属性“Source”
,我理解这个错误,但我无法解决如何避免它。如果有人能建议我如何将
源代码
更新为
源代码
的值,请

公共字符串源
{
获取{return(string)GetValue(SourceProperty);}
set{SetValue(SourceProperty,value);}
}
公共静态只读DependencyProperty SourceProperty=
从属属性。寄存器(
姓名(来源),
类型(字符串),
类型(标记指示器),
新的PropertyMetadata(null,ReadInSource));
私有静态void ReadInSource(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
字符串源=e.NewValue.ToString();
Source=Source;//此处出错:无法在静态上下文中访问非静态属性“Source”
}

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

private static void ReadInSource(DependencyObject d,DependencyPropertyChangedEventArgs e)
{
标记指示器标记指示器=(标记指示器)d;
字符串源=e.NewValue.ToString();
tagsIndicator.Source=Source;//此处错误:无法在静态上下文中访问非静态属性“Source”
}
这将使错误消失

但是

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

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

再次将属性设置为刚刚设置的值,以响应已设置的属性,对我来说似乎没有意义


除非您在问题中没有描述某些特定需求,否则您可以完全删除该方法。(即使你确实有这样的需求,你也应该问一个不同的问题,因为考虑到它引导你找到的代码,你似乎在错误地满足这种需求。)

作为一个注释,因为NewValue可以为null,
e.NewValue.ToString()
应该是
e.NewValue As string
e.NewValue?.ToString()