2016-06-15 12 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

あなたのクラスで 'INotifyPropertyChanged'インタフェースを実装して、プロパティを変更すると、' PropertyChanged'イベントが発生していることを確認する必要があります。 '=>'表記を使った自動式はここでは適合しません。 – dymanoid

+1

それ以外にも、WPFデータバインディングの場合、 'CurrentJob'はプライベートフィールドではなくパブリックプロパティでなければなりません。 – Clemens

答えて

2

private Job CurrentJob;イベントはPropertyChangedイベントを発生させる必要があります。 INotifyPropertyChangedインターフェースからクラスを継承し、そのようにそれを実装:

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を作成できます。