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 に答える