Это не большое дело, но я хотел бы узнать больше о WPF, и мне интересно, есть ли менее подробный способ решения следующей проблемы.У меня установлен код XAML (фрагмент ниже) для отображения и скрытия столбцов в сетке данных на основе логического свойства ShowAdvancedContent
исходного объекта wndState
.Сетка данных сама привязана к источнику данных, а не к объекту wndState, поэтому я указываю атрибут Source и, поскольку я преобразую из bool в Visibility, я указываю атрибут Converter.
<locset:WindowState x:Key="wndState" />
<locdata:BooleanToVisibilityConverter x:Key="BoolToCollapsedConverter"
True="Visible" False="Collapsed" />
...
<DataGridHyperlinkColumn x:Name="urlColumn" Binding="{Binding Path=Url}"
Header="{DynamicResource ResourceKey=urlColHdr}"
MinWidth="100" Width="*"
Visibility="{Binding Source={StaticResource wndState}, Path=ShowAdvancedContent, Converter={StaticResource ResourceKey=BoolToCollapsedConverter}, Mode=OneWay}">
<DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<EventSetter Event="Hyperlink.Click" Handler="OnHyperlinkClick" />
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
<DataGridTextColumn x:Name="addressColumn" Binding="{Binding Path=Address}"
Header="{DynamicResource ResourceKey=addressColHdr}"
MinWidth="120" Width="SizeToCells"
Visibility="{Binding Source={StaticResource wndState}, Path=ShowAdvancedContent, Converter={StaticResource ResourceKey=BoolToCollapsedConverter}, Mode=OneWay}" />
<DataGridTextColumn x:Name="portColumn" Binding="{Binding Path=Port}"
Header="{DynamicResource ResourceKey=portColHdr}"
MinWidth="80" Width="SizeToCells"
Visibility="{Binding Source={StaticResource wndState}, Path=ShowAdvancedContent, Converter={StaticResource ResourceKey=BoolToCollapsedConverter}, Mode=OneWay}" />
<DataGridTextColumn x:Name="protocolVersionColumn" Binding="{Binding Path=ProtocolVersion}"
Header="{DynamicResource ResourceKey=protocolColHdr}"
Width="SizeToHeader"
Visibility="{Binding Source={StaticResource wndState}, Path=ShowAdvancedContent, Converter={StaticResource ResourceKey=BoolToCollapsedConverter}, Mode=OneWay}"/>
ЭтоПодход работает просто отлично - когда я переключаю значение ShowAdvancedContent, столбцы сворачиваются и становятся видимыми.Однако я повторяю эту точную строку четыре раза:
Visibility="{Binding Source={StaticResource wndState},
Path=ShowAdvancedContent,
Converter={StaticResource ResourceKey=BoolToCollapsedConverter},
Mode=OneWay}" />
Поэтому сегодня, когда я изменил имя свойства с «AdvancedColVisibility» на «ShowAdvancedContent», мне пришлось изменить его в четырех местах.(Как я уже писал выше, не так уж и много. Я спрашиваю больше ради изучения WPF, чем об управлении этим конкретным блоком кода.)
Есть ли способ объявить эту привязку один раз иссылаться на это объявление в каждом из четырех столбцов, например, как ресурс привязки какого-либо типа или через ресурс Syle?