2013-01-20 105 views
1

我使用wpf与mvvm和我有一个datagrid 4列: ID,原件,翻译,IsTranslated 我想当翻译列中的文本正在改变,IsTranslated列的值自动更改为检查 这是我的datagrid xaml代码:如何在DataGridTextColumn值更改时更改DataGridCheckBoxColumn值?

<DataGrid Grid.Row="3" AutoGenerateColumns="False" ItemsSource="{Binding AllXliffs}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" /> 
       <DataGridTextColumn Header="Original" Binding="{Binding Path=Original}" /> 
       <DataGridTextColumn Header="Translated" Binding="{Binding Path=Translated}" /> 
       <DataGridCheckBoxColumn Header="IsTranslated" Binding="{Binding Path=IsTranslated, Mode=TwoWay, Converter={StaticResource StringToBooleanConverter}, UpdateSourceTrigger=PropertyChanged}" ></DataGridCheckBoxColumn> 
      </DataGrid.Columns> 
</DataGrid> 

回答

1

由于您使用的MVVM,所以你可以在你的模型属性增加一个小的商业逻辑:

像此:

 private string _translation; 
     private bool _isTranslated; 

     public string Translation 
     { 
      get { return _translation; } 
      set 
      { 
       _translation = value; 
       IsTranslated = !String.IsNullOrEmpty(_translation); 
      } 
     } 

     public bool IsTranslated 
     { 
      get { return _isTranslated; } 
      set 
      { 
       _isTranslated = value; 
       OnPropertyChanged("IsTranslated"); 
      } 
     } 
0

您应该将IsTranslated列绑定到已转换的绑定路径,而不是IsTranslated绑定路径。

0

试试这个:

<Window.Resources> 
     <loca:StringToBooleanConverter x:Key="myCon" /> 
    </Window.Resources> 
    <Grid> 
     <DataGrid Grid.Row="3" AutoGenerateColumns="False" ItemsSource="{Binding}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" /> 
       <DataGridTextColumn Header="Original" Binding="{Binding Path=Original}" /> 
       <DataGridTextColumn Header="Translated" Binding="{Binding Path=Translated}" /> 
       <DataGridCheckBoxColumn Header="IsTranslated" Binding="{Binding Path=Translated, Converter={StaticResource myCon}, UpdateSourceTrigger=PropertyChanged}" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 

转换器应该是这样的:

public class StringToBooleanConverter: IValueConverter 
{ 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      string translated = (string)value; 
      if (string.IsNullOrEmpty(translated)) 
       return false; 
      else 
       return true; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     {    
      return Binding.DoNothing; 
     } 
} 
+0

他如何获得IsTranslated数据以防止他想将其存储到数据库中? – HichemSeeSharp

+0

他没有指定该值来自数据库,他只想在文本更改时自动将此值更改为true。 – kmatyaszek

+0

我的数据来自xml文件并存储在其中。 –