C# setter能否获得它所拥有的属性的名称';在哪
我只是想知道是否可以这样做:C# setter能否获得它所拥有的属性的名称';在哪,c#,wpf,C#,Wpf,我只是想知道是否可以这样做: private int _x; public int X { get{ return _x;} set{_x = value; OnPropertyChanged(*theNameOfTheProperty*);} } 没有实际指定OnPropertyChanged(“X”) 我想让OnPropertyChanged更通用可能是使用反射…有两种方法可以满足您的要求。第一种方法是将OnPropertyChanged修改为(.NET 4.5+): private v
private int _x;
public int X
{
get{ return _x;}
set{_x = value; OnPropertyChanged(*theNameOfTheProperty*);}
}
没有实际指定OnPropertyChanged(“X”)代码>
我想让OnPropertyChanged
更通用可能是使用反射…有两种方法可以满足您的要求。第一种方法是将OnPropertyChanged修改为(.NET 4.5+):
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
....
}
然后从setter调用它:
set
{
_var = value;
OnPropertyChanged();
}
这将自动使用调用属性填充“propertyName”参数,除非您显式提供该参数。注意:使用System.Runtime.CompilerServices需要
获取CallerMemberName
属性的名称空间
另一种方法是编写一个自定义版本的propfull
代码段,以便在创建时为您填充它。我的版本是:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>propnp</Title>
<Shortcut>propnp</Shortcut>
<Description>Code snippet for property with OnPropertyChanged</Description>
<Author>Bradley</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Property type</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>Property name</ToolTip>
<Default>MyProperty</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>The variable backing this property</ToolTip>
<Default>myVar</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[public $type$ $property$
{
get { return $field$;}
set
{
$field$ = value;
OnPropertyChanged($property$);
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
propnp
propnp
OnPropertyChanged属性的代码段
布拉德利
膨胀
类型
属性类型
int
所有物
属性名
我的财产
领域
支持此属性的变量
迈瓦尔
有两种方法可以满足您的要求。第一种方法是将OnPropertyChanged修改为(.NET 4.5+):
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
....
}
然后从setter调用它:
set
{
_var = value;
OnPropertyChanged();
}
这将自动使用调用属性填充“propertyName”参数,除非您显式提供该参数。注意:使用System.Runtime.CompilerServices需要
获取CallerMemberName
属性的名称空间
另一种方法是编写一个自定义版本的propfull
代码段,以便在创建时为您填充它。我的版本是:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>propnp</Title>
<Shortcut>propnp</Shortcut>
<Description>Code snippet for property with OnPropertyChanged</Description>
<Author>Bradley</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Property type</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>Property name</ToolTip>
<Default>MyProperty</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>The variable backing this property</ToolTip>
<Default>myVar</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[public $type$ $property$
{
get { return $field$;}
set
{
$field$ = value;
OnPropertyChanged($property$);
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
propnp
propnp
OnPropertyChanged属性的代码段
布拉德利
膨胀
类型
属性类型
int
所有物
属性名
我的财产
领域
支持此属性的变量
迈瓦尔
您可以通过以下方式声明您的OnPropertyChanged
:
protected void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
然后可以从属性中这样调用它:
public IEnumerable<Customer> Customers
{
get
{
return this.customers;
}
set
{
this.customers = value;
this.OnPropertyChanged();
}
}
公共IEnumerable客户
{
收到
{
把这个还给顾客;
}
设置
{
这就是顾客=价值;
this.OnPropertyChanged();
}
}
您可以通过以下方式声明您的OnPropertyChanged
:
protected void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
然后可以从属性中这样调用它:
public IEnumerable<Customer> Customers
{
get
{
return this.customers;
}
set
{
this.customers = value;
this.OnPropertyChanged();
}
}
公共IEnumerable客户
{
收到
{
把这个还给顾客;
}
设置
{
这就是顾客=价值;
this.OnPropertyChanged();
}
}
您可以使用Expression
s执行此操作。例如,它在Prism
中使用,因此您可以编写OnPropertyChanged(()=>MyProperty)代码>。这就是你要找的吗?如果你使用的是c#5.0,那么这个属性在这里非常方便。使用Prism和BindableBase
你只需做set{SetProperty(ref myProperty,value);}
btw。这非常简单。你可以用Expression
s来做。例如,它在Prism
中使用,因此您可以编写OnPropertyChanged(()=>MyProperty)代码>。这就是您要寻找的吗?如果您使用的是c#5.0,那么该属性在这里非常方便。使用Prism和BindableBase
您只需执行set{SetProperty(ref myProperty,value);}
btw。这真的很简单。糟糕,也许我应该指定我们在VS 2010中使用.NET 4…我该如何编写的自定义版本propfull@jharr100,添加了propnp
(我的自定义代码段)对于我的回答,糟糕透了,也许我应该指定我们在VS2010中使用.NET4…我该如何编写的自定义版本propfull@jharr100,在我的答案中添加了propnp
(我的自定义代码片段)。