附加属性绑定代理

时间:2016-03-16 16:23:15

标签: c# wpf mvvm binding attached-properties

我在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?绑两次?这甚至可能吗?

0 个答案:

没有答案