首页 / C# / 处理C#中属性更改的更好方法
处理C#中属性更改的更好方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了处理C#中属性更改的更好方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2125字,纯文字阅读大概需要4分钟。
内容图文
![处理C#中属性更改的更好方法](/upload/InfoBanner/zyjiaocheng/810/6609e4ca457f426f8f269eb38a6b687e.jpg)
我正在构建一个MVVM应用程序,其中ToBeListened类有几个属性,PropertyA和PropertyB,我想听它们.
public class ToBeListened : INotifyPropertyChanged
{
private double _propertyA;
private string _propertyB;
/*Here I'm omitting the update part where NotifyPropertyChanged gets called*/
public double PropertyA{get; set; }
public double PropertyB{get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
这两个属性由Listener类监听,因此我在其中实现了一个EventHandler,它监听ToBeListened对象.
public class Listener
{
private ToBeListened toBeListenedObject;
public Listener()
{
toBeListenedObject = new ToBeListened();
toBeListenedObject.PropertyChanged += newPropertyChangedEventHandler(PropertyListener_PropertyChanged);
}
private void PropertyListener_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "PropertyA":
{
/*...DO SOMETHING...*/
}
case "PropertyB":
{
/*...Do something else...*/
}
}
问题是,我真的不喜欢我找到的解决方案. switch-case不是多态友好的,所以
>有更好的方法吗?也许是使用重载的东西? (像private void PropertyListener_PropertyChanged(double sender,PropertyChangedEventArgs e)
>最重要的是,像这样编写ViewModel是否正确?
解决方法:
在过去,我使用了一个源自Dictionary< string,Action>的小类.以此目的.它是这样的:
public class PropertyChangedHandler : Dictionary<string, Action>
{
public PropertyChangedHandler(INotifyPropertyChanged source)
{
source.PropertyChanged += Source_PropertyChanged;
}
private void Source_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Action toDo;
if (TryGetValue(e.PropertyName, out toDo))
{
toDo();
}
}
}
然后你的听众看起来像这样:
public class Listener
{
private ToBeListened toBeListenedObject = new ToBeListened();
PropertyChangedHandler handler;
public Listener()
{
handler = new PropertyChangedHandler(toBeListenedObject)
{
{ "PropertyA", DoA },
{ "PropertyB", DoB }
};
}
private void DoB()
{
}
private void DoA()
{
}
}
这只是一个给你一个想法的例子 – 当然,它可以扩展到更复杂的目的.
内容总结
以上是互联网集市为您收集整理的处理C#中属性更改的更好方法全部内容,希望文章能够帮你解决处理C#中属性更改的更好方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。