Farzin Bayati
Farzin Bayati

Reputation: 13

how to change DataGridCheckBoxColumn value when DataGridTextColumn value changing?

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

Answers (3)

HichemSeeSharp
HichemSeeSharp

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

kmatyaszek
kmatyaszek

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

Stipo
Stipo

Reputation: 4606

You should bind IsTranslated column to Translated binding path, not IsTranslated binding path.

Upvotes: 0

Related Questions