Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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# setter能否获得它所拥有的属性的名称';在哪_C#_Wpf - Fatal编程技术网

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
(我的自定义代码片段)。