2014-06-10 6 views
0

wpf 데이터 바인딩을 사용하기 전에 창 항목을 성공적으로 바인딩했습니다. 여기에서했던 것과 거의 똑같은 방식입니다.WPF 데이터 바인딩, 작동하지 않는 이유가 없습니다.

시스템 상태로 색과 텍스트를 변경하기 위해 TextBlock 바인딩을위한 XAML GUI가 있습니다.

<TextBlock 
    HorizontalAlignment="Left" Margin="200,359,0,0" TextWrapping="Wrap" 
    Text="{Binding Path=StateText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    VerticalAlignment="Top" Width="565" Height="84" 
    Background="{Binding Path=StateColour, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 

내 xaml.cs에서 내보기 모델에 datacontext를 설정했습니다.

MobilityWelcomeViewModel mobilityWelcomeViewModel = new mobilityWelcomeViewModel(); 

public MobilityWelcome() 
{ 
    InitializeComponent(); 
    this.DataContext = this.mobilityWelcomeViewModel; 
} 

나는이 어댑터를 통해 내 데이터 모델에 쓰는 생성자를 가지고 있습니다.

public class MobilityWelcomeViewModel 
{ 
    private bool State; 
    private string _Text; 
    private Brush _StateColour; 
    BackgroundWorker StateWorker = new BackgroundWorker(); 
} 

public ShellEMobilityWelcomeViewModel() 
{ 
    this._ANMStateColour = Brushes.White; 
    this.ANMStateWorker.DoWork += this.ANMStateWorker_DoWork; 
    this.ANMStateWorker.RunWorkerCompleted += this.ANMStateWorker_RunWorkerCompleted; 
    this.ANMStateWorker.RunWorkerAsync(); 
    this._ANMText = "Loading ANM State"; 

    IApplicationPointAdapter testWrite = AdapterFactory.Instance.GetApplicationPointAdapter(); 
     testWrite.WriteBinary("HMI.EV.SITE1.STATUS.CONTACTBREAKEROPEN", false); 

} 

내보기 모델에는 속성이 있습니다.

public Brush StateColour 
{ 
    get { return this._StateColour; } 
    set { this._StateColour = value; } 
} 

public string StateText 
{ 
    get { return this._Text; } 
    set { } 
} 

은 내가 디버그에서이 값을 변경할 볼 수있는 배경 노동자.

나는 정말로 여기저기서 혼란 스럽다. 전체 바인딩은 표면적으로 매우 단순 해 보입니다. 상당히 새로운 것에서부터 순진한 지식까지는 내가 잘못한 것을 볼 수 없습니다.

미리 감사드립니다. (또한 변수 이름을 변경하여 내 프로젝트를 위장하여 유사 객체간에 맞춤법이 잘못 인식되거나 무시되는 경우)

답변

0

datacontext를 설정하고 있지만 ViewModel을 올바른 위치에 초기화하지 않았다고 생각합니다.

스누프와 같은 도구를 사용하여 무엇이 잘못되었는지 확인하기 만하면됩니다.

당신은 생성자 다음과 같은

에서의 ViewModel을 초기화하는되어야한다.

public MobilityWelcome() 
    { 
     InitializeComponent(); 
     mobilityWelcomeViewModel = new mobilityWelcomeViewModel(); 
     this.DataContext = this.mobilityWelcomeViewModel; 
    } 

또한 INotificationPropertyChanged를 구현하고 있는지 확인하십시오. 주석에 대한

public Brush StateColour 
    { 
     get { return this._StateColour; } 
     set { this._StateColour = value; 
       OnPropertyChanged("StateColour"); 
      } 
    } 
+0

감사합니다 아래, 나는 인터페이스를 구현하고 생성자로 인스턴스를 이동처럼

재산 세터가 있어야합니다. 그러나 아무런 효과가 없었다. 텍스트 블록 대신 텍스트 상자를 사용해 보았지만 뷰 모델 매개 변수가 원격으로 변경되었습니다. 뷰 모델에서는 텍스트 만 변경되지만 브러쉬는 –

+0

미안하지만 문제를 완전히 이해할 수 있는지 확실하지 않습니다. 그러나 브러시를 속성으로 사용하는 샘플 프로젝트를 만들고 viewmodel에서 변경할 때 텍스트 블록의 배경을 업데이트합니다. 내가 말한 한 가지는이 줄에서 개인 속성의 색을 변경하려고합니다 ._ANMStateColour = Brushes.White; 공공 재산으로 변경할 수 있습니까? ANMSTateColour = Brushes.White와 같이 개인 속성이 OnPropertyChanged를 실행하지 않아 UI에 해당 값이 변경되었음을 알릴 수 있습니다. – Krishna

+0

수정 사항을 발견했습니다! 내 사용 문이 잘못된 유형의 브러시를 가져 오는 중입니다. System.Windows.Drawing을 사용하여 System.Windows.Media를 사용하여 변경했습니다. –