C# WPF Prism -未调用触发器方法

dohp0rv5  于 2023-03-24  发布在  C#
关注(0)|答案(1)|浏览(160)

当文本框获得焦点或失去焦点时,我的ViewModel中的方法MyMethod总是被调用。但是如果我现在用Keyboard.ClearFocus()删除焦点,那么方法MyMethod不会被调用。是否有更好的方法来解决这个问题,或者我做错了什么?

查看:

<TextBox x:Name="MyTextBox" HorizontalAlignment="Left" Margin="35,237,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Text="{Binding MyTextBoxText}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="LostFocus">
                    <prism:InvokeCommandAction Command="{Binding MyCommand}">
                        <prism:InvokeCommandAction.CommandParameter>
                            <MultiBinding Converter="{StaticResource multiParameterConverter}">
                                <Binding Path="Name" ElementName="MyTextBox"/>
                                <Binding Path="IsFocused" ElementName="MyTextBox"/>
                            </MultiBinding>
                        </prism:InvokeCommandAction.CommandParameter>
                    </prism:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </TextBox>

视图模型:

public DelegateCommand<object> MyCommand=>
      _myCommand ??= new DelegateCommand<object>(MyMethod);  

private void MyMethod(object myObject)
{
  //Do something
}

代码隐藏:

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
   Keyboard.ClearFocus();
}
umuewwlo

umuewwlo1#

我认为你混淆了“焦点”和“键盘焦点”。Keyboard.ClearFocus()清除了键盘焦点,而不是“焦点”。因此,要调用命令也为“键盘焦点”哟可以订阅:

<i:Interaction.Triggers>
   <i:EventTrigger EventName="LostKeyboardFocus">
      <i:InvokeCommandAction Command="{Binding MyCommand}"/>
   </i:EventTrigger>
</i:Interaction.Triggers>

请注意,如果您还保留LostFocus,则该命令可能会被调用多次。

相关问题