是否可以使用触发器设置器来更改ViewModel属性?

时间:2016-03-18 09:15:36

标签: c# wpf mvvm binding

我使用绑定到某些难以触及的附加属性的IsOpen打开Popup。我想要的只是以某种方式将IsOpen值传递给ViewModel。

尝试使用setter:

<Popup StaysOpen="False"
       IsOpen="{Binding Path=(local:ListViewBehavior.IsColumnHeaderClicked), RelativeSource={RelativeSource FindAncestor, AncestorType=GridViewColumnHeader}}">
    <Popup.Style>
        <Style TargetType="Popup">
            <Style.Triggers>
                <Trigger Property="IsOpen" Value="True">
                    <!-- this is not possible -->
                    <Setter Property="{Binding IsPopupOpened ...}" Value="True" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Popup.Style>
</Popup>

给出:

  

不能在'Setter'类型的'Property'属性上设置'Binding'。 '绑定'只能在DependencyObject的DependencyProperty上设置。

有没有办法将IsOpen值(已经绑定到View中的其他内容)传递给ViewModel?

1 个答案:

答案 0 :(得分:1)

您可以创建一个附加属性,该属性由eventhandler设置为Popup的Opened和Closed事件。这可以通过OneWayToSource绑定绑定到ViewModel的IsPopupOpen属性。 我也不太确定是否有更简单的解决方案,但这是一种&#34;解决方法&#34;我会做什么,如果没有人在这里提供更好的解决方案。