2017-02-26 1 views
-2

아래 코드에 문제가 있습니다. ivalueconverter (LengthConverter)가 첫 번째 매개 변수 "Binding Path = Length"가이 경우 ConverterParameter 3보다 작 으면 데이터 트리거로 수행하려고하는 것은 공백을 표시합니다.ElementStyle DataTrigger

사실 인 행의 경우 빈 텍스트가 표시됩니다. 그렇지 않으면 내 데이터를 얻습니다.

첫 번째 줄에서 Binding = "{Binding Data1}"을 생략하면 datatrigger가 제대로 작동하지만 셀 값을 편집 할 수없고 Data1의 설정자를 트리거 할 수 없다는 문제는 다음과 같습니다. 데이터를 업데이트하십시오. 아래 내용이 있으면 데이터를 편집 할 수 있지만 트리거가 더 이상 작동하지 않습니다 ...

데이터 입력과 데이터 트리거를 모두 사용할 수있는 방법이 있습니까?

<DataGridTextColumn Header="MyData1" Binding="{Binding Data1}"> 
<DataGridTextColumn.ElementStyle> 
     <Style TargetType="{x:Type TextBlock}"> 
     <Setter Property="Text" Value="{Binding Data1, Mode=TwoWay}"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=Length, Converter={StaticResource LengthConverter}, ConverterParameter=3}" Value="True"> 
       <Setter Property="Text" Value="{x:Null}"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGridTextColumn.ElementStyle> 

감사합니다!

답변

0

내가 사용하는 것이 좋습니다 것 같은 사용자 정의 CellTemplateCellEditingTemplateDataGridTemplateColumn :

<DataGridTemplateColumn Header="MyData1"> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Path=Data1, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock > 
       <TextBlock.Style> 
        <Style TargetType="TextBlock"> 
         <Setter Property="Text" Value="{Binding Path=Data1}" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Path=Data1, Converter={StaticResource LengthConverter}, ConverterParameter=3}" Value="True"> 
           <Setter Property="Text" Value="{x:Null}" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

귀하의 변환기 지금 Data1.Length을 가리켜 야 :

LengthConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((value as string)?.Length??0) > 3; 
    } 
} 

길이 속성 자체는받지 않습니다 텍스트 변경시의 PropertyChanged 이벤트 따라서 문자열 Data1에 직접 바인딩하십시오 ...