2016-06-16 5 views
-1

したがって、ネストされたクラスのプロパティへのパスを設定できないため、データトリガの問題が発生しています。パスにネストされたクラスのプロパティを与えるには?

<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Item.ColWarning.HasWarning, UpdateSourceTrigger=PropertyChanged}" Value="True"> 

そして、ここで私がアクセスしようとしているプロパティです::これは私のトリガーは、現在のように見えるものである。この場合

public class Column { 

    public Warning ColWarning = new Warning(); 

    //other stuff happens in this class 

    public class Warning : BaseModel 
    { 

     private const string ChangedLength = "Column length will also be changed in tables: "; 

     public bool HasWarning { get { return _warning == null ? false : true; } } 

     private string _warning; 

     public string WarningMessage { get { return _warning; } } 

     public void ValidateCol(Column col) 
     { 
      _warning = "something"; 
      NotifyPropertyChanged("HasWarning"); 
      //actual validation stuff happens here 
     } 
    } 
} 

、WPFのパス内のアイテムは、列を参照します。また、私は警告クラスを取り除き、列クラスのプロパティを含める場合、正しく動作することを知っています。この場合、私のパスはItem.HasWarningに変わり、動作します。この問題で光が出てきたら、私はそれを感謝します!

public Warning ColWarning = new Warning(); 

Bindingは、プロパティだけに、フィールドにバインドしません。問題はColWarningがフィールドではなく、財産であるということであるように

+3

'ColWarning'はフィールドです。 {get; set;}でそれをプロパティにして、それがうまく動作するかどうか確認してください。フィールドにはバインドできず、プロパティにのみバインドできます。また、INotifyPropertyChangedを実装していないため、コントロールが入力された後に変更が表示されません。 –

+0

ありがとう、私はそれを試みます。また、コードにNotifyPropertyChangedを含めるのを忘れましたが、私はそれを私のソリューションに実装しました。 –

+0

クール、あなただけのプロパティで良いはずです。 –

答えて

0

が見えます。あなたがプロパティとしてColWarningを再定義する場合Item経由Columnの他の特性のためのあなたの結合作品ということを考えると、あなたが持っているパスは動作するはずです:

private Warning _colWarning = new Warning(); 
public Warning ColWarning { 
    get { return _colWarning; } 
    set { 
     _colWarning = value; 
     // ...or whatever you're doing to raise PropertyChanged 
     OnPropertyChanged("ColWarning"); 
    } 
} 
関連する問題