2016-06-16 1 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"); 
    } 
} 
관련 문제