C# 属性-如何避免代码重复

C# 属性-如何避免代码重复,c#,C#,在为遵循MVVM模式的应用程序创建将在viewmodel中使用的类时,我必须以以下方式实现属性: private string _MyStringPropertyA; public string MyStringPropertyA { get {return _MyStringPropertyA;} set { _MyStringPropertyA=value; OnPropertyChanged(()=>MyStringPrope

在为遵循MVVM模式的应用程序创建将在viewmodel中使用的类时,我必须以以下方式实现属性:

private string _MyStringPropertyA;
public string MyStringPropertyA
{
    get {return _MyStringPropertyA;}
    set 
    {
        _MyStringPropertyA=value;
        OnPropertyChanged(()=>MyStringPropertyA);
    }
}


private string _MyStringPropertyB;
public string MyStringPropertyB
{
    get {return _MyStringPropertyB;}
    set 
    {
        _MyStringPropertyB=value;
        OnPropertyChanged(()=>MyStringPropertyB);
    }
}
而不是更简单的

public string MyStringPropertyA {get;set;}
public string MyStringPropertyA {get;set;}
只是因为我必须在二传手上发起比赛。除了使我的代码更长之外,我认为它还有一种复制粘贴编程的代码味道。我能做些什么来避免这种情况?是否可以构造一个泛型类,比如,我不知道,
MVVMEnabled
,我可以实现为:

public MVVMEnabled<string> MyStringPropertyA {get;set;}
public MVVMEnabled<string> MyStringPropertyB {get;set;}
public MVVMEnabled MyStringPropertyA{get;set;}
公共MVVMEnabled MyStringPropertyB{get;set;}

因此,泛型类中的代码将确保在设置值时OnPropertyChanged会触发?

在我工作的地方,我们执行了类似于您的
MVVMEnabled
建议的操作,并且效果良好

唯一需要注意的是,该属性的值现在隐藏在
MVVMEnabled
(例如,value)的属性中,因此最终会得到一个稍微详细一些的绑定表达式,例如
{binding MyStringPropertyA.value}

为此,请启用
MVVMEnabled
implement inotifyproperty更改。您需要一个属性,例如
Value
,它是将要管理的值(示例中的字符串):

在主类中,将属性设置为只读:

public MVVMEnabled<string> MyStringPropertyA {get;private set;}
只要您的绑定是这样的:

{Binding MyStringPropertyA.Value}

你应该没事。

在我工作的地方,我们做了一些类似于你的
MVVMEnabled
建议的事情,效果很好

唯一需要注意的是,该属性的值现在隐藏在
MVVMEnabled
(例如,value)的属性中,因此最终会得到一个稍微详细一些的绑定表达式,例如
{binding MyStringPropertyA.value}

为此,请启用
MVVMEnabled
implement inotifyproperty更改。您需要一个属性,例如
Value
,它是将要管理的值(示例中的字符串):

在主类中,将属性设置为只读:

public MVVMEnabled<string> MyStringPropertyA {get;private set;}
只要您的绑定是这样的:

{Binding MyStringPropertyA.Value}

你应该没事。

在我工作的地方,我们做了一些类似于你的
MVVMEnabled
建议的事情,效果很好

唯一需要注意的是,该属性的值现在隐藏在
MVVMEnabled
(例如,value)的属性中,因此最终会得到一个稍微详细一些的绑定表达式,例如
{binding MyStringPropertyA.value}

为此,请启用
MVVMEnabled
implement inotifyproperty更改。您需要一个属性,例如
Value
,它是将要管理的值(示例中的字符串):

在主类中,将属性设置为只读:

public MVVMEnabled<string> MyStringPropertyA {get;private set;}
只要您的绑定是这样的:

{Binding MyStringPropertyA.Value}

你应该没事。

在我工作的地方,我们做了一些类似于你的
MVVMEnabled
建议的事情,效果很好

唯一需要注意的是,该属性的值现在隐藏在
MVVMEnabled
(例如,value)的属性中,因此最终会得到一个稍微详细一些的绑定表达式,例如
{binding MyStringPropertyA.value}

为此,请启用
MVVMEnabled
implement inotifyproperty更改。您需要一个属性,例如
Value
,它是将要管理的值(示例中的字符串):

在主类中,将属性设置为只读:

public MVVMEnabled<string> MyStringPropertyA {get;private set;}
只要您的绑定是这样的:

{Binding MyStringPropertyA.Value}

你应该没问题。

我建议你创建代码段,这样写多个属性就不会花费太多精力。

我建议你创建代码段,这样写多个属性就不会花费太多精力。

我建议你创建代码段,这样写下多个属性就不会花费太多的精力。

好吧,我建议您创建代码片段,这样写下多个属性就不会花费太多精力。

我认为这样的事情不会奏效,至少我以前从未见过这样的事情

相反,您可以使用面向方面的编程来实现:

[NotifyPropertyChanged] 
public class MyClass
{
    public string MyStringPropertyA {get;set;}
    public string MyStringPropertyA {get;set;}

    // ...

我认为这样的事情行不通——至少我以前从未见过这样的事情

相反,您可以使用面向方面的编程来实现:

[NotifyPropertyChanged] 
public class MyClass
{
    public string MyStringPropertyA {get;set;}
    public string MyStringPropertyA {get;set;}

    // ...

我认为这样的事情行不通——至少我以前从未见过这样的事情

相反,您可以使用面向方面的编程来实现:

[NotifyPropertyChanged] 
public class MyClass
{
    public string MyStringPropertyA {get;set;}
    public string MyStringPropertyA {get;set;}

    // ...

我认为这样的事情行不通——至少我以前从未见过这样的事情

相反,您可以使用面向方面的编程来实现:

[NotifyPropertyChanged] 
public class MyClass
{
    public string MyStringPropertyA {get;set;}
    public string MyStringPropertyA {get;set;}

    // ...

实际上,我的问题是如何实现类似
MVVMEnabled
的东西。我脑子里有这个概念,但无法理解如何对其进行编码。您是否可以分享您的工作场所如何实现类似
MVVMEnabled
的方法?嗯,我想知道是否可以将赋值运算符重写为
MVVMEnabled
generic,以便在绑定到属性名称本身时设置值字段。抱歉,但我刚刚意识到,这会引发Value属性事件,而不是MyStringPropertyA。我遗漏了什么吗?在我实现了你的解决方案之后,我发布了一个关于这个的新问题()(谢谢!)。基本上我想去掉构造函数中的初始值设定项,所以我使用了一个小技巧。如果您能看一看,我将不胜感激。实际上,我的问题是您将如何实现类似
MVVMEnabled
的功能。我脑子里有这个概念,但无法理解如何对其进行编码。您是否可以分享您的工作场所如何实现类似
MVVMEnabled
的方法?嗯,我想知道是否可以将赋值运算符重写为
MVVMEnabled
generic,以便在绑定到属性名称本身时设置值字段。抱歉,