2017-02-26 29 views
-2

我对下面的代码有问题。如果ivalueconverter(LengthConverter)决定第一个参数“Binding Path = Length”小于3的ConverterParameter,那么我想要处理的数据触发器显示空白。ElementStyle DataTrigger

所以对于那些是真的我得到空白文本。否则,我得到我的数据。

问题如下,如果在下面的第一行Binding =“{Binding Data1}”被省略,datatrigger工作正常,但是我不能编辑单元格值并让它触发Data1的setter来更新数据。如果我有下面的东西,我可以编辑数据,但触发器不再工作...

有没有什么办法可以让我的数据输入和数据触发器工作?

<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

我会建议使用DataGridTemplateColumn定制CellTemplateCellEditingTemplate这样的:

<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 ...