2015-02-04 2 views
2

내 proget (C#)에서 mvvm 패턴을 사용하는데 문제가 있습니다. 내보기에 라벨이 있고, 라벨의 텍스트는 내 뷰 모델에서 속성에 바인더 제본되어이에서 INotifyPropertyChanged 인터페이스를 구현하는 내보기 모델,다른 정적 속성을 사용하는 속성을 바인딩하는 방법

val label=new Label(); 
label.SetBinding<StatusViewModel>(Label.TextProperty, x=>x.TextProp); 

입니다 :

class StatusViewModel 
{ 
private string _textProp; 
public string TextProp 
{ 
    get 
    { 
     return _textProp; 
    } 
    set 
    { 
     if(_textProp == value) 
     return _textProp; 

     _textProp=value; 
     OnPropertyChange(); 
    } 
} 
} 

는하지만 다른 정적이 특성 :

static class StaticClass 
{ 
public static string StaticText {get; set; } 
} 

내가 StatusViewModel에서 내 TextProp 속성 내에서이 정적 속성의 StaticText를 사용합니다. 그리고 그것에 대한 StaticText 속성 마스트 레이블 변경 알림.

P. 가능한 실수에 대해 유감스럽게 생각하고, 나는이 코드를 내 머리 속에서 입력했다. 당신이 static 속성에 바인딩하는 경우

+0

세터에서 신고서를 받았습니다. – Will

답변

1

, 당신은 아마 잘못하고있다 : 고 말했다

가 초기 바인딩은 매우 간단합니다. 당신은 방금 static 하나를 반환하는 속성을 추가해야합니다

public string StaticTextRedirect 
{ 
    get { return StaticClass.StaticText; } 
    set { StaticClass.StaticText = value; } 
} 

PropertyChanged 이벤트가 다른 짐승이다. 물론 StaticTextRedirect 속성에서 키울 수 있지만, 기타 클래스가 속성을 변경하면 실행되지 않습니다. 아마도 클라이언트 코드가 적절한 PropertyChanged 이벤트를 수신하고 발생시킬 수있는 정적 속성의 설정자에서 사용자 지정 이벤트를 발생시켜야 할 것입니다.

+0

또한 INotifyPropertyChanged 인터페이스에서 StaticClass를 확장하려고 시도하지만 정적 속성 내부에서 OnPropertyChange를 사용할 수 없습니다. 몇 가지 예를 들어 주시겠습니까? – Brian

+0

@Brian 어쨌든 작동하지 않는 정적 클래스는 데이터 컨텍스트가 아니며 정적 속성의 컨텍스트도 아닙니다. VM이 청취하는 * 커스텀 * 이벤트 (자신의 것)를 일으켜 자신의'PropertyChanged' 이벤트를 발생시킬 필요가 있습니다. 말이 돼? 많은 번거 로움처럼 들린다면, 그렇습니다. 정적 속성에 바인딩하지 않아야합니다 :) – BradleyDotNET

+1

그래서 StaticClass에서 내 자신의 이벤트를 생성하고 StaticText의 설정자에서 발생시킨 다음 StatusViewModel에서이 이벤트를 구독하고 이벤트가 발생하면 OnPropertyChange ("TextProp")를 실행하면됩니다. 작업? – Brian

관련 문제