簡體   English   中英

更新實例wpf副本的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM