Обновление флажка ячейки DataGrid после редактирования было сделано в другой ячейке DataGrid - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть DataGrid, привязанный к коллекции ObservableCollection

    <DataGrid Name="dgWork" Grid.Row="4" Grid.ColumnSpan="4" ItemsSource="{Binding Path=TranslationData}" Style="{StaticResource DataGridStyle}" Height="206"
              CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" SelectionMode="Single" VerticalScrollBarVisibility="Auto"
              RowEditEnding="dgWork_RowEditEnding">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Id" Binding="{Binding Path=Id}" IsReadOnly="True" />
            <DataGridTextColumn Header="Original" Binding="{Binding Path=Original}" IsReadOnly="True" CanUserSort="False" />
            <DataGridTextColumn Header="Translated" Binding="{Binding Path=Translated}" CanUserSort="False" />
            <DataGridCheckBoxColumn Header="Is Translated" Binding="{Binding Path=IsTranslated, Converter={StaticResource translatedConverter}, Mode=TwoWay}" CanUserSort="False" IsReadOnly="True" />
        </DataGrid.Columns>
    </DataGrid>

TranslationData это свойство следующим образом:

    public ObservableCollection<XLIFFData> _xliffData = new ObservableCollection<XLIFFData>();
    public ObservableCollection<XLIFFData> TranslationData { get { return _xliffData; } }

Когда переведенный текст обновляется:

        DataGridRow dgRow = e.Row;
        //Update the _doc for the Row Id if original != translated
        //Update the _doc translated to equal true
        var localData = (XLIFFData) dgRow.Item;

        //Making presumption that even changing case is editing text
        if (localData.Original.Equals(localData.Translated)) return;

        foreach(var item in _xliffData)
        {
            if(item.Id == localData.Id)
            {
                item.Translated = localData.Translated;
                item.IsTranslated = "translated";
            }
        }

Как я также могу обновить CheckBox, чтобы его отключить?

Я попытался обновить коллекцию, полагая, что DataGrid будет обновлен. Я также попытался выполнить команду dgWork.Items.Refresh (), которая не удалась с утверждением, что это не разрешено при редактировании или добавлении

Ответы [ 2 ]

0 голосов
/ 01 ноября 2013

Проверьте, не изменилось ли свойство XLIFFData.IsTranslated. Если это так, я бы посоветовал посмотреть XLIFFData ViewModel, так как вам не нужен конвертер в столбце флажка ViewModel должен обрабатывать обновление всего, что связано с этим полем, если я не понимаю вопрос.

0 голосов
/ 23 декабря 2010

Вам может потребоваться вызвать Commit перед установкой вашего свойства IsTranslated. Однако есть проблема, что изменение другого значения вызовет RowEndEditing миллион раз и завершится сбоем. У меня была похожая проблема с CellEndEdit. Вы можете предотвратить это, попробовав следующий код ....

dgWork.CommitEdit()
this.Dispatcher.BeginInvoke(
    new Action(delegate()
    {
        item.IsTranslated = true; /// << Assuming this is a bool for the checkbox??
        dgWork.Items.Refresh();
    }),
    System.Windows.Threading.DispatcherPriority.Background);
...