2017-09-15 12 views
0

DataGrid 템플릿에 콤보 상자가 있습니다. 여기에 명령을 호출하는 이벤트 트리거가 있습니다. 명령이 내 기능을 호출하고 있음을 확인했습니다. 내 함수가 false를 반환하면 콤보 상자의 배경색을 노란색으로 설정하려고합니다. true를 반환하면 흰색으로 유지하고 싶습니다.WPF DataGrid 템플릿 열 콤보 상자 바인딩 표현식 오류

문제는 다음 절에있는 것으로 나타납니다

"Path=DataContext.ApplicationProfilesCollection[].ValidEnvironment"

를 내가 얻을 출력 창에서 :

"System.Windows.Data Error: 40 : BindingExpression path error: '[]' property not found on 'object' ''ObservableCollection`1' (HashCode=44314665)'. BindingExpression:Path=DataContext.ApplicationProfilesCollection[].ValidEnvironment; DataItem='ProfilesUserControl' (Name=''); target element is 'ComboBox' (Name=''); target property is 'NoTarget' (type 'Object')"

현재 컬렉션의 3 개 항목이 있습니다. WFP가 각자를 어떻게 인식하는지 알아? XAML의 "[]"에 무엇이 들어 있습니까? 또한 - MVVM 패턴을 준수해야합니다.

아래 XAML을 참조하십시오. 시간에 대한 감사합니다,

<DataTemplate DataType="models:ApplicationProfile"> 
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource 
         Mode=FindAncestor, 
         AncestorType={x:Type UserControl}}, 
         Path=DataContext.DsnCollection}" 
      Validation.ErrorTemplate="{StaticResource ValidationTemplate}" 
      SelectedItem="{Binding DataSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ValidateDataSourceCommand}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
    <ComboBox.Style> 
     <Style TargetType="ComboBox"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ApplicationProfilesCollection[].ValidEnvironment}" Value="false"> 
        <Setter Property="ComboBox.Background" Value="Yellow"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.Style> 
</ComboBox> 

+0

ComboBox의 항목, 즉 DsnCollection의 항목에 ValidEnvironment 속성이 있습니까? 또는이 속성은 어디에 정의되어 있습니까? – mm8

+0

데이터 모델을 표시해야합니다. 예외 메시지에 def가 표시되어 데이터 바인딩이 잘못되었습니다. – esiprogrammer

+1

분명히 []]은 XAML에 쓸 수 없습니다. 정확히 무엇을하려고하는지 명확히 할 수 있습니까? 변환기를 사용해야한다고 생각하지만, 당신이하고 싶은 것이 확실하지 않습니다. – Kilazur

답변

0

ValidEnvironment은 각 항목에 대한 true/false로 설정 ItemsSource 모음 (DsnCollection)에있는 항목의 공공bool재산 (가정된다 Dsn 또는 무엇이라고 부르는 지) 컬렉션에 있습니다.

그런 다음이처럼에 바인딩 할 수 있습니다 : 명령이 아무것도 반환하지 않기 때문에

<Style TargetType="ComboBox"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding ValidEnvironment}" Value="False"> 
      <Setter Property="ComboBox.Background" Value="Yellow"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

당신은 명령에 DataTrigger를 바인딩 할 수 없습니다.