1

私は mvvm で wpf を使用しており、ID、Original、Translated、IsTranslated の 4 つの列を持つデータグリッドがあります。Translated 列のテキストが変更されたときに、IsTranslated 列の値が自動的に変更されてチェックされます。これは私のデータグリッド xaml コードです。

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

3 に答える 3

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");
            }
        }
于 2013-01-20T15:41:54.960 に答える
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;
        }
}
于 2013-01-20T15:35:10.683 に答える
0

IsTranslated 列を IsTranslated バインディング パスではなく、Translated バインディング パスにバインドする必要があります。

于 2013-01-20T15:02:07.577 に答える