在我的模型中,我有以下属性
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);
}
}
有一种比在属性更改时调用该函数更方便的方法
答案 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");
}
}
我希望这会有所帮助。