2016-06-15 3 views
0

나는이 XAML 다음 한 (WPF) 호출되지 않습니다. 여기 뒤에 내 코드의 일부이다 :컨버터는

private Job CurrentJob => ((FooClass) WindowsPanel.Children[0]).CurrentJob; 

을 그리고 여기 내 (더미) 변환기입니다 : 나는

지금, 내 문제가 있음을 확인

public class JobToColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var j = (Job) value; 
     return new SolidColorBrush(Color.FromArgb(100, 60, 116, 154)) 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

CurrentJob 변화가 변환기 이벤트가 발생하지 않으며 내 Convert 메서드는 호출되지 않습니다.

CurrentJob은 읽기 전용 속성이므로 WPF 프레임 워크는 속성 변경시기를 알지 못합니다. 맞습니까?

+4

. '=>'표기법을 사용하는 자동 표현식은 여기에 맞지 않습니다. – dymanoid

+1

그 외에도 WPF 데이터 바인딩의 경우 'CurrentJob'은 비공개 필드가 아닌 public 속성이어야합니다. – Clemens

답변

2

private Job CurrentJob; 이벤트는 PropertyChanged 이벤트를 발생시켜야합니다. INotifyPropertyChanged 인터페이스에서 클래스를 상속하고 그 방법으로 그것을 구현 :

당신은 당신의 클래스의`INotifyPropertyChanged` 인터페이스를 구현하고 속성을 변경할 때`PropertyChanged`의 이벤트가 시작되어 있는지 확인해야
public event PropertyChangedEventHandler PropertyChanged; 

protected void OnPropertyChanged(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 

    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
} 


private Job currentJob; 

public Job CurrentJob 
{ 
    get { return curentJob; } 
    private set 
    { 
     if (this.currentJob != value) 
     { 
      this.currentJob = value; 
      OnPropertyChanged("CurrentJob"); 
     } 
    } 
} 
0

귀하의 재산은 비공개이므로 공개로 설정하십시오.

또한 속성이 읽기 전용이고 ((FooClass) WindowsPanel.Children[0]).CurrentJob의 변경 사항을 전파하지 않는다면 바인딩 OneTime을 만들 수 있습니다.