[英]update the properties of a copy of an instance wpf
我有两个列表框。 一个绑定到ObservableCollection<Person> MyNetwork
的源列表框,另一个列表框是我的目标列表框,该目标列表框绑定到ObservableCollection<Person> Crew
。每次将项目拖放到目标列表框中时,都会创建一个sourceItem
的新实例。
现在,我想更新新对象的属性,但是它似乎不起作用。 当我更改sourceItems(FirstName)
属性之一时,是否有一种方法可以更新sourceItems的副本。 我对WPF和MVVM还是很陌生,想知道这是否可行,还是可以解决这个问题?
这是我到目前为止所拥有的:在ViewModel
源列表框:
private ObservableCollection<Person> _myNetwork = new ObservableCollection<Person>();
public ObservableCollection<Person> MyNetwork
{
get { return _myNetwork; }
set { _myNetwork = value; RaisePropertyChanged(); }
}
目标列表框:
private ObservableCollection<Person> _crew = new ObservableCollection<Person>();
public ObservableCollection<Person> Crew
{
get { return _crew; }
set { _crew = value; RaisePropertyChanged("Crew");}
}
void IDropTarget.Drop(IDropInfo dropInfo)
{
Person sourceItem = dropInfo.Data as Person;
if (dropInfo.Data is Person)
{
Person person = new Person(sourceItem.FirstName,
sourceItem.LastName,
sourceItem.Profession);
Crew.Add(person);
}
}
该模型:
public Person(string FirstName, string LastName, string Profession)
{
_firstName = FirstName;
_lastName = LastName;
_profession = Profession;
}
private string _firstName;
public string FirstName
{
get { return this._firstName; }
set { this._firstName = value; RaisePropertyChanged("FirstName"); }
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set { _lastName = value; RaisePropertyChanged("LastName"); }
}
private string _profession;
public string Profession
{
get { return _profession; }
set { _profession = value; RaisePropertyChanged("Profession"); }
}
我建议使用一个包装PropertyChanged事件的库,以便在需要调用属性时更轻松地更新它们。
曾经的例子是Caliburn for WPF 。 您可以在代码中使用NotifyOfPropertyChange(() => FirstName)
来更新FirstName属性,但是您需要这样做(它不必只在setter中使用)。
这是一篇有关如何使用它的好文章。
例:
using Caliburn.Micro;
namespace CaliburnMicroExample
{
public class ShellViewModel : PropertyChangedBase
{
private string _message;
public string Message
{
get { return _message; }
set
{
_message = value;
NotifyOfPropertyChange(() => Message);
}
}
public ShellViewModel()
{
Message = "Hello World";
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.