2016-08-31 3 views
0

Я установил DisplayMemberBinding для GridViewColumn в WPF.WPF: используйте PriorityBinding для DisplayMemberBinding в GridViewColumn

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}" DisplayMemberBinding="{Binding Exception, Mode=OneWay, Converter={StaticResource typeConverter}, FallbackValue='---'}"/> 

typeConverter «подражает» расширение Exception.GetType(), чтобы показать тип исключения в качестве строки в Гуй. Если нет исключения, и это значение равно null, я хочу вывести другое свойство в этом столбце. Теперь я хочу использовать PriorityBinding как для DisplayMemberBinding, но ни GridViewColumn не делает, кроме PriorityBinding как «подэлемент», а также не может использовать атрибут DisplayMemberBinding как «подэлемент». Есть ли способ использования PriorityBinding для GridViewColumn как это:

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}"> 
    <PriorityBinding> 
     <Binding Path="Exception" Mode="OneWay" Converter="{StaticResource typeConverter}" IsAsync="True" /> 
     <Binding Path="AnotherProperty" IsAsync="True" /> 
    </PriorityBinding> 
</GridViewColumn> 

EDIT

Я изменил код на предложение «АШ» ниже, но это не работает:

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}"> 
    <GridViewColumn.DisplayMemberBinding> 
     <PriorityBinding FallbackValue="-*-"> 
      <Binding Path="Exception" Converter="{StaticResource typeConverter}" Mode="OneWay" IsAsync="True"/> 
      <Binding Path="Comment" FallbackValue="---"/> 
     </PriorityBinding> 
    </GridViewColumn.DisplayMemberBinding> 
</GridViewColumn> 

Отображаемое значение пуст, если свойство Exception равно null. Я проверил, установлено ли второе свойство привязки «комментарий», и оно есть.

Эти два привязок работу:

ответ

1

вам не хватает <GridViewColumn.DisplayMemberBinding> тег:

<GridViewColumn> 
    <GridViewColumn.DisplayMemberBinding> 
     <PriorityBinding> 
      <Binding Path="Exception" Mode="OneWay" Converter="{StaticResource typeConverter}" IsAsync="True" /> 
      <Binding Path="AnotherProperty" IsAsync="True" /> 
     </PriorityBinding> 
    </GridViewColumn.DisplayMemberBinding> 
</GridViewColumn> 

GridViewColumn помечен атрибутом ContentProperty и правообладатель является заголовок: [ContentProperty("Header")]. Поэтому внутреннему содержимому тега <GridViewColumn> без префикса GridViewColumn. должно быть присвоено свойство заголовка

+0

Спасибо за ваш ответ! Я реализовал его так, как вы предполагали, но он работает неправильно. Если «Исключение-привязка» имеет значение NULL, оно не показывает никакого значения, даже если я определил fallbackValues ​​для второго привязки и привязки приоритета. Я редактировал мой пост выше. – rbr94

+1

@RobinBreusch, я думаю, если Exception имеет значение null и конвертер возвращает пустую или пустую строку, тогда PriorityBinding принимает его как допустимое значение и не использует привязку Anotherproperty (info: https://msdn.microsoft.com/en-us /library/system.windows.data.prioritybinding(v=vs.110).aspx#Anchor_6). попробуйте вернуть 'DependencyProperty.UnsetValue' из конвертера, если исключение равно null – ASh

+0

Это решило проблему. Большое спасибо! – rbr94

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