2017-02-26 66 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 ...