Reputation: 13
i'm using wpf with mvvm and i have a datagrid with 4 columns: ID,Original,Translated,IsTranslated i want when text in Translated column is changing,value of IsTranslated column automatically change to checked this is my datagrid xaml code:
<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>
Upvotes: 1
Views: 2444
Reputation: 3318
Since You are using MVVM so you can add a small business logic in your model property :
Like this :
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");
}
}
Upvotes: 1
Reputation: 19296
Try this:
<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>
Converter should look like this:
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;
}
}
Upvotes: 0
Reputation: 4606
You should bind IsTranslated column to Translated binding path, not IsTranslated binding path.
Upvotes: 0