1

새로운 C#을 5.0 버전처럼 뭔가에서 INotifyPropertyChanged 구현에서 "마법 문자열"을 제거하기 위해 도입MVVM CallerMemberName와 "마법 문자열"

OnPropertyChanged(); 

방법은 정의에 의한 CallerMemberName 가능하다 : 또한 m은

protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 
{ ... } 
이다

uch는 "마법 문자열"방식보다 친숙한 리팩토링 방식과 람다 식보다 빠릅니다.하지만 한 세트의 접근 자에서 OnPropertyChanged를 여러 번 호출 할 수 있는지 궁금합니다. 예를 들어, 우리는 다음과 같이 원한다면 :

public int Width 
{ 
    get 
    { 
     return width; 
    } 
    set 
    { 
     width = value; 
     OnPropertyChanged("Width"); 
     OnPropertyChanged("Height"); 
    } 
} 
우리가 CallerMemberName 방법으로이 작업을 수행하고 "마법 문자열"와 람다 표현식을 사용하여 피할 수있는 방법

? 그러나 내가 한, 내가 "마법 문자열"를 다루는 일부 영리한 방법을 간과 그래서 아마 MVVM에 새로운 오전

public string Error 
     { 
      get; 
      private set; 
     } 

     public string this[string columnName] 
     { 
      get 
      { 
       if (columnName == "Name") 
       { 
        if (String.IsNullOrWhiteSpace(Name)) 
         Error = "Name cannot be null or empty."; 
        else 
         Error = null; 
       } 

       return Error; 
      } 
     } 

: 나는 또한 궁금

는 우리가 어떻게 IDataError 정보에서 "마법 문자열"을 사용하여 피할 수있다 약간 연구하고 아무것도 찾지 못했습니다.

+0

왜 너비가 변하기 때문에 높이가 변경되었다고 말하고 싶습니까? 실제로 "크기"와 같은 것을 의미 했습니까? –

+0

이것은 단지 예일 뿐이지 만 때로는 하나의 속성이 다른 속성에 의존 할 수 있습니다. 예를 들어 너비가 항상 높이 * 2 인 경우를 예로들 수 있습니다. – Overpain

답변

4

간단한 대답은 할 수 없다는 것입니다. CallerMemberName이 나타내는대로 호출자의 이름이 포함됩니다.
PropertyChanged을 현재보다 다른 것으로 올리려면 "이전"방법 중 하나를 사용해야합니다.

IDataErrorInfo에도 이러한 방법 중 하나를 사용해야하며 대안이 없습니다. 모두에 추가하는

[Magic] 
public string Name { get { return _name; } set { _name = value; } } 
string _name; 

또 다른 예 : 이것은 도움이 될 것입니다

-1

: 하나 개의 속성에 추가 예로

"마술의 종류" 어려움에서 INotifyPropertyChanged

http://visualstudiogallery.msdn.microsoft.com/d5cd6aa1-57a5-4aaa-a2be-969c6db7f88a 수업 속성 :

[Magic] 
public class MyViewModel: INotifyPropertyChanged 
{ 
    public string Name { get; set; } 
    public string LastName { get; set; } 
    ..... 
} 
+0

-1; 이것은 아마도 좋은 도구이지만 OP 문제에 대한 해결책이라고 생각하지 않습니다. 내가 잘못 본 경우 몇 가지 설명과 함께 답변을 개선하십시오. –

1

이 질문은 C# 5.0에 관한 것이지만 사람들이 여전히이 자연에 대해 질문이 있으면 C# 6.0을 확인하십시오. C# 6.0이 문제를 해결할 수있는 좋은 방법이 있습니다. nameof 키워드를 확인하십시오. 관심있는 사람이 있다면 작은 게시물을 썼습니다 : c# 6.0 solves magic strings problem