2014-01-09 3 views
0

Следующие триггеры работают почти как ожидалось:Почему DataTrigger не работает после PropertyChanged?

<Style.Triggers> 
    <Trigger Value="True" Property="IsSelected"> 
     <Setter Property="Foreground" Value="White" /> 
    </Trigger> 
    <DataTrigger Value="True" Binding="{Binding UpdateSourceTrigger=PropertyChanged, Converter={StaticResource InUseConverter}}"> 
     <Setter Property="Foreground" Value="OrangeRed" /> 
    </DataTrigger> 
</Style.Triggers> 

После загрузки вид, цвета правильно.
Затем я выполняю async taks en, когда он закончил. Я даю свойство, измененное на объекте, имеющем привязку к моей строке datagrid.
Но почему DataTrigger не уволен (мне нужно обновить представление, чтобы увидеть эффект)?

EDIT:
Моя проблема в том, что я не сейчас, какое имущество я должен предоставить PropertyChanged.
Некоторые подробности о DataGrid (Projects является ObservableCollection):

DataGrid SelectedItem="{Binding Project}" ItemsSource="{Binding Projects}"> 

Свойство объекта Project, что привязка должна использовать это:
Project.Variants[0].InUse

Я попробовал также спусковые:

<DataTrigger Value="True" Binding="{Binding Path=Variants[0].InUse, Converter={StaticResource NotNullConverter}}"> 

<DataTrigger Value="True" Binding="{Binding Path=., Converter={StaticResource InUseConverter}}"> 

С моделью, которую я пробовал после Project.Variants[0].InUse = null;:

Project.OnPropertyChanged("InUse"); 
Project.Variants[0].OnPropertyChanged("InUse"); 
raisePropertyChanged("Project.Variants[0].InUse"); 
raisePropertyChanged("Variants[0].InUse"); 
raisePropertyChanged("Projects"); 
raisePropertyChanged("Project"); 
raisePropertyChanged("InUse"); 
+2

'UpdateSourceTrigger' для когда вы хотите передать значение из представления для просмотра модели. В этом случае вы хотите получить значение и для этого, чтобы это произошло автоматически, вашему классу необходимо реализовать интерфейс INotifyPropertyChanged. Имеет ли это? – dkozl

+0

{Путь привязки =. UpdateSourceTrigger = PropertyChanged, Converter = {StaticResource InUseConverter}} –

+0

@Gerard в любом случае в вашем случае вы не укажете 'Path', чтобы он не запускался при каких-либо конкретных изменениях свойств из вашей модели представления. Вы используете несколько свойств из своей модели просмотра в этом конвертере? Может быть, стоит изменить это на «MultiBinding». – dkozl

ответ

1

В прошлом он работает с помощью:

<DataTrigger Value="True" Binding="{Binding Path=Variants[0].InUse, Converter={StaticResource NotNullConverter}}"> 
    <Setter Property="Foreground" Value="OrangeRed" /> 
</DataTrigger> 

Project.Variants[0].OnPropertyChanged("InUse"); 
0

Try установить передний план свойство в вашем стиле, чтобы изменить его динамически во время выполнения

<Setter Property="Foreground" Value="White"/> 
<Style.Triggers> 
    <Trigger Value="True" Property="IsSelected"> 
     <Setter Property="Foreground" Value="White" /> 
    </Trigger> 
    <DataTrigger Value="True" Binding="{Binding UpdateSourceTrigger=PropertyChanged, Converter={StaticResource InUseConverter}}"> 
     <Setter Property="Foreground" Value="OrangeRed" /> 
    </DataTrigger> 
</Style.Triggers> 
Смежные вопросы