Я работаю с представленным решением here, который работал хорошо для меня до этого момента. Я сейчас пытаюсь выполнить DataTrigger привязки к собственности интерфейса с помощью следующей XAML:WPF привязка данных к интерфейсу не может найти свойство
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=(selection:IChartDefinitionViewModel.SelectedItem).HasErrors}" Value="False">
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=(selection:IChartDefinitionViewModel.SelectedItem).HasErrors}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
Когда я ввожу этот код я получаю предупреждение «The член„SelectedItem“не распознается или не доступен», и Я получаю подобное исключение, когда пытаюсь запустить. Единственное, там является SelectedItem члена определяется на интерфейсе, и я могу даже перейти к ней из XAML:
public interface IChartDefinitionViewModel : IReactiveSelector<SomeClass>, IMayHaveErrors
{
// stuff
}
public interface IReactiveSelector<T> : // more stuff
{
T SelectedItem { get; set; }
}
Может кто-нибудь посоветовать, почему это происходит и что я могу сделать для решения проблемы? Я хотел бы управлять этим на основе определения интерфейса или использовать datatemplate для моей реализации IChartDefinitionViewModel, если это возможно.
Update: Это также не работает, но по другой причине - при попытке привязать к объекту непосредственно, фон не меняется, несмотря на то, что HasErrors переключает от истинного на ложное.
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem.HasErrors}" Value="True">
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
<DataTrigger Binding="{Binding SelectedItem.HasErrors}" Value="False">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
Связывание данных работает с контекстом данных, а не с нереализованными интерфейсами. Если вы установите контекст данных окна или сетки на * любой * объект, вы можете привязать любое свойство по имени до тех пор, пока объект имеет это свойство. Интерфейсов нет необходимости –
Понял - к сожалению, привязка по-прежнему не работает, когда я привязываюсь к объекту напрямую (см. Обновление). – ket
Ваше редактирование работает для меня, пока все части на месте, однако, возможно ли, что ваши 'DataContext' смешаны. У каждой строки действительно есть свойство «SelectedItem»? –