2015-01-17 3 views
1

У меня есть DataGrid в моем приложении WPF с столбцами, которые содержат булевские значения. Я хочу зеркалировать DataGridCheckBoxColumn, но я хочу изменить этот флажок в цветное текстовое поле. Таким образом, для истинного значения он покажет зеленый «Проход», а для ложного - красный «Сбой». Я попытался установить DataGridCheckBoxColumn.ElementStyle, а также DataGridTemplateColumn с кнопкой внутри, но привязки не обновляются. Они устанавливаются отлично, когда они загружаются, но не тогда, когда элемент обновляется. В сетке данных содержится коллекция TestPointAttempts.привязка к кнопке в WPF DataGrid не обновляется

Вот мой код для столбца шаблона с кнопкой внутри него.

<DataGridTemplateColumn Header="Talk Out" > 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Button Content="{Binding TalkOut, Converter={StaticResource BoolToPassFailConverter}, Mode=TwoWay}" 
            Foreground="{Binding TalkOut, Converter={StaticResource BoolToGreenRedConverter}, Mode=TwoWay}" 
            Style="{StaticResource TestResultButtonStyle}" 
            Click="TalkOutButton_Click"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Я могу получить событие щелчка рабочего и обновить значение «TalkOut» в коде, но кнопка Текст и передний план не обновляют. В моей модели просмотра у меня есть код для обновления элементов. Я хватаю выбранную ячейку как TestPointAttempt и передаю ее в viewmodel для обновления. Вот мой ViewModel код:

public void ToggleTestResult(TestPointAttempt tpa, bool inOutSwitch) 
    { 
     if (inOutSwitch) 
     { 
      tpa.TalkIn = !tpa.TalkIn; 
      RaisePropertyChanged(() => tpa.TalkIn); 
     } 
     else 
     { 
      tpa.TalkOut = !tpa.TalkOut; 
      RaisePropertyChanged(() => tpa.TalkOut); 
     } 
    } 

А вот моя testPointAttempt модель:

public class TestPointAttempt 
{ 
    public string Id { get; set; } 

    public int TestAttemptNumber { get; set; } 

    public bool? TalkIn { get; set; } 
    public bool? TalkOut { get; set; } 
    ... 
} 

Как получить ячейку для обновления на изменения?

+1

когда вы вызываете 'ToggleTestResult'? и почему бы вам не сообщить свойства внутри 'TalkIn' и' TalkOut' свойство – safi

+0

Yup, вот и все. Благодаря! – WiteCastle

ответ

0

TestPointAttempt нуждается в реализации INotifyPropertyChanged, и установителю необходимо запустить событие propertyChanged.

Другим вариантом является использование Fody.

Смежные вопросы