我在xaml中有这个绑定:
<Popup IsOpen="{Binding Path=(local:ListViewBehavior.IsColumnHeaderClicked),
RelativeSource={RelativeSource FindAncestor, AncestorType=GridViewColumnHeader}}" ...
Popup
位于GridViewColumn.Header
内。
ListViewBehavior.IsColumnHeaderClicked
是一个简单的bool
附加属性:
public static bool GetIsColumnHeaderClicked(DependencyObject obj) => (bool)obj.GetValue(IsColumnHeaderClickedProperty);
public static void SetIsColumnHeaderClicked(DependencyObject obj, bool value) => obj.SetValue(IsColumnHeaderClickedProperty, value);
public static readonly DependencyProperty IsColumnHeaderClickedProperty =
DependencyProperty.RegisterAttached("IsColumnHeaderClicked", typeof(bool), typeof(ListViewBehavior), new PropertyMetadata(false));
它的值由后面的一些代码设置:
void listView_ColumnClicked(object sender, RoutedEventArgs e)
{
var column = (DependencyObject)e.OriginalSource;
SetIsColumnHeaderClicked(column, !GetIsColumnHeaderClicked(column)); // toggle
}
想法是在点击GridViewColumnHeader
时显示弹出窗口。到目前为止,一切都在发挥作用。
问题:如何将此附加属性绑定到我的ViewModel中的IsPopupOpen
属性?
我在考虑某种代理,它同时用于绑定到附加属性和ViewModel属性。或许我应该再次绑定到IsOpen
?绑两次?这甚至可能吗?