C# 属性-如何避免代码重复
在为遵循MVVM模式的应用程序创建将在viewmodel中使用的类时,我必须以以下方式实现属性:C# 属性-如何避免代码重复,c#,C#,在为遵循MVVM模式的应用程序创建将在viewmodel中使用的类时,我必须以以下方式实现属性: private string _MyStringPropertyA; public string MyStringPropertyA { get {return _MyStringPropertyA;} set { _MyStringPropertyA=value; OnPropertyChanged(()=>MyStringPrope
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,以便在绑定到属性名称本身时设置值字段。抱歉,