0
    <TextBox x:Name="DescriptionTextBox" 
             Text="{Binding SelectedEntity.Description,
                            ValidatesOnExceptions=True}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="LostFocus" SourceName="DescriptionTextBox">
                <ei:CallMethodAction MethodName="RaiseCanExecuteChanged" 
                TargetObject="{Binding Command, ElementName=SaveButton}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TextBox>

    <userControls:SaveCloseUserControl />

在这个用户控件里面

<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
    <Button Width="50"
            Command="{Binding SaveCommand}"
            Content="Save" />
    <Button Width="50"
            Command="{Binding CloseCommand}"
            Content="Close" />
 </StackPanel>

这里的问题是这个 TargetObject="{Binding Command, ElementName=SaveButton}" 没有找到 SaveButton,因为它在 userControls:SaveCloseUserControl 我在网上看了,我找到了一个需要后面代码的解决方案(从 2009 年开始),是否没有今天做这些事情的简单方法?问候

编辑

根据@huzle 的回答,我在用户控件背后的代码中做到了这一点

    public object CreateButton { get { return CreateChild; } }

在 xaml 中,我为保存按钮添加了一个名称。

所以我的最终版本看起来像这样

    <TextBox x:Name="DescriptionTextBox" 
             Text="{Binding SelectedEntity.Description,
                            ValidatesOnExceptions=True}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="LostFocus" SourceName="DescriptionTextBox">
                <ei:CallMethodAction MethodName="RaiseCanExecuteChanged" 
                TargetObject="{Binding CreateButton.Command,ElementName=MySaveCloseUserControl}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TextBox>

    <userControls:SaveCloseUserControl x:Name="MySaveCloseUserControl"/>
4

1 回答 1

1

为您的“SaveCloseUserControl”提供名为“InnerSaveButton”的“SaveButton”的公共属性,并将 ElementName 绑定到您的 SaveCloseUserControl,并使用 Path 获取内部按钮的命令。

<TextBox x:Name="DescriptionTextBox" 
         Text="{Binding SelectedEntity.Description,
                        ValidatesOnExceptions=True}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="LostFocus" SourceName="DescriptionTextBox">
            <ei:CallMethodAction MethodName="RaiseCanExecuteChanged" 
            TargetObject="{Binding InnerSaveButton.Command, ElementName=MySaveCloseUserControl}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>

<userControls:SaveCloseUserControl X:Name="MySaveCloseUserControl"/>
于 2014-11-04T18:10:53.770 回答