在某些对象的属性上设置多个对象中的属性值

时间:2013-11-13 12:46:49

标签: c# wpf

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

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中的属性值发生变化时为集合中的每个对象设置相同的属性值,所以我在我的viewmodel中想出了这个

 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);
            }

        }

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

1 个答案:

答案 0 :(得分: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");
  }
}

我希望这会有所帮助。