source

C#/WPF: ViewModel의 모든 속성에 대해 Property Changed?

factcode 2023. 4. 14. 22:13
반응형

C#/WPF: ViewModel의 모든 속성에 대해 Property Changed?

이런 수업이 있어요.

public class PersonViewModel : ViewModelBase //Here is the INotifyPropertyChanged Stuff
{
    public PersonViewModel(Person person)
    {
        PersonEntity = person;
    }

    public Person PersonEntity { 
        get { return PersonEntity.Name; }
        private set { PersonEntity.Name = value; RaisePropertyChanged("PersonEntity");
    }

    public string Name { 
        get { return PersonEntity.Name; }
        set { PersonEntity.Name = value; RaisePropertyChanged("Name");
    } 
    public int Age{ 
        get { return PersonEntity.Age; }
        set { PersonEntity.Age= value; RaisePropertyChanged("Age");
    } 

    public void ChangePerson(Person newPerson)
    {
        //Some Validation..
        PersonEntity = newPerson;
    }

내 TextBox는 ViewModel의 이름 및 사용 기간에 바인딩됩니다.View Model에서 _person 객체를 변경한 경우 각 속성에 대해 RaisePropertyChanged를 다시 호출해야 합니까?아니면 자동으로 호출할 수 있는 방법이 있습니까(구체적인 예에서는 약 15개의 속성이 있습니다).

도와주셔서 감사합니다.

건배조셉

다음을 사용하여 모든 속성이 변경되었음을 나타낼 수 있습니다.null또는string.Empty의 속성명에 대해서PropertyChangedEventArgs이는 Property Changed 매뉴얼에 기재되어 있습니다.

이 문제에 대처하기 위해 사용한 또 하나의 솔루션: 먼저 값을 설정하고 나서PropertyChangedEventArgs를 추가하는 것입니다.Set기능하다ViewModelBase다음과 같이 표시됩니다.

public class ViewModelBase : INotifyPropertyChanged
{
    protected bool Set<T>(ref T backingField, T value, [CallerMemberName] string propertyname = null)
    {
        // Check if the value and backing field are actualy different
        if (EqualityComparer<T>.Default.Equals(backingField, value))
        {
            return false;
        }

        // Setting the backing field and the RaisePropertyChanged
        backingField = value;
        RaisePropertyChanged(propertyname);
        return true;
   }
}

이렇게 하는 것이 아니라:

public string Name { 
    get { return PersonEntity.Name; }
    set { PersonEntity.Name = value; RaisePropertyChanged("Name");
} 

다음과 같이 하면 동일한 작업을 수행할 수 있습니다.

public string Name { 
    get { return PersonEntity.Name; }
    set { Set(ref PersonEntity.Name,value);
} 

언급URL : https://stackoverflow.com/questions/1859946/c-wpf-propertychanged-for-all-properties-in-viewmodel

반응형