我试图了解如何在UWP项目中设置EventTriggerBehaviors。 所以我理解我需要安装Microsoft.Xaml.Behaviors.Uwp.Managed包,并在我的XAML文件中声明以下命名空间:
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
按钮本身应声明为:
<Button x:Name="btnTest >
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="GotFocus" >
<Core:EventTriggerBehavior.Actions>
<Core:InvokeCommandAction Command="{Binding ... }" />
</Core:EventTriggerBehavior.Actions>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
然后我迷路了...我想要的是一旦按钮获得焦点,它就会在文本框中设置一些文本(基于按钮名称)。
我是否需要服务,ViewModel代码应该是什么?
实际上,有人能够推荐关于这个主题的精彩阅读,例子,书籍吗?
更新以下詹姆斯回复: XAML InvokeCommandAction变为:
<Core:InvokeCommandAction Command="{Binding OnButtonFocusCommand}" CommandParameter="{Binding Name, ElementName=btnTest}" />
但是如何在ViewModel中的方法中接收参数?
答案 0 :(得分:1)
InvokeCommandAction Command属性需要在视图模型中实现ICommand,以便在触发EventTriggerBehavior时执行操作。
你可能在XAML中有这样的东西:
<Button x:Name="btnTest">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="GotFocus">
<Core:EventTriggerBehavior.Actions>
<Core:InvokeCommandAction Command="{Binding OnButtonFocusCommand}" />
</Core:EventTriggerBehavior.Actions>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
然后在绑定的视图模型中,你会得到类似的东西:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand(() =>
{
this.TextBoxText = "Hello, World";
});
}
public ICommand OnButtonFocusCommand { get; private set; }
虽然DelegateCommand没有内置在平台上,但您可以在线找到许多DelegateCommand或RelayCommand的实现。
编辑:你也可以使用这样的传递参数:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand<RoutedEventArgs>(args =>
{
this.TextBoxText = "Hello, World";
});
}
RoutedEventArgs将是您要经过的参数类型。对于Focus事件传递的内容,这是您将收到的参数。对于这些情况,您需要DelegateCommand{T}。
我引用的DelegateCommand示例还有一种机制,可以通过验证模型来检查是否运行该操作。你可以这样做:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand<RoutedEventArgs>(args =>
{
this.TextBoxText = "Hello, World";
},
args => args.OriginalSource is TextBox);
}
对于更新TextBox文本的场景,您需要在视图模型中创建一个属性(在我的示例中,我展示了TextBoxText正在更新)。然后,该属性需要绑定到XAML中TextBox的Text属性。
对于要看一看的事情,我会建议你看一下MVVM框架(可能是MvvmLight)并阅读它,如果你还没有。
此外,official Microsoft samples on GitHub可能涵盖了许多可能对您有用的主题。
如果您需要更多信息,请联系我,我很乐意提供帮助。