1

在我的模型中,我有以下属性

private string somestring;
public string SomeString
        {
            get
            {
                return somestring;
            }
            set
            {
                SetField(ref somestring, value, "SomeString");
            }
        }

在我的视图模型中,我有一个 ObservableCollection 代表选定的对象

private ObservableCollection<Models.model> selectedObjects
public ObservableCollection<Models.model> SelectedObjects
        {
            get
            {
                return selectedObjects;
            }
            set
            {
                SetField(ref selectedObjects, value, "SelectedObjects");
            }
        }

假设我想为集合中的每个对象设置相同的属性值,只要该属性值在 currentObject 中发生变化,所以我在我的视图模型中想出了这个

 private void SetMultiplePropertyValues<T>(string propName, object value)
        {
            if(!SelectedObjects.Contains(currentObject)) return;
            var p = typeof(T).GetProperty(propName);
            foreach (var obj in SelectedObjects)
            {
                p.SetValue(obj, value, null);
            }

        }

有没有比在属性更改时调用该函数更方便的方法

4

1 回答 1

2

这是一个例子:

interface IObjectWithOnPropertyChangedMethod
{
  void OnPropertyChanged(string propertyName);
}

public class MyPoco : INotifyPropertyChanged, IObjectWithOnPropertyChangedMethod
{
  //// Implementation of IObjectWithOnPropertyChangedMethod interface
  public void OnPropertyChanged(string propertyName)
  {
    if(PropertyChanged != null)
    {
       PropertyChanged(.....);
    }
  }

 //// Implementation of INotifyPropertyChanged interface
 public event PropertyChanged;
}

类似的事情,现在当你想触发 OnPropertyChanged 虽然你的对象列表只是做这样的事情:

foreach (var obj in list)
{
  if(obj is IObjectWithOnPropertyChangedMethod)
  {
    ((IObjectWithOnPropertyChangedMethod)obj).OnPropertyChanged("MyProperty");
  }
}

我希望这有帮助。

于 2013-11-13T13:41:40.227 回答