更新实例wpf副本的属性

本文关键字:属性 副本 wpf 实例 更新 | 更新日期: 2023-09-27 18:25:05

我有两个列表框。一个源列表框绑定到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"); }
}

更新实例wpf副本的属性

我建议使用一个封装PropertyChanged事件的库,以便在需要调用属性时更容易更新它们。

一个例子是WPF的Caliburn。您可以在代码中使用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";
        }
    }
}