我有一个带有一些控件的UI。
XAML:
<Button Name="btnGetDetails" Content="Get Details" Grid.Row="2" Command="{Binding SearchCommand}"/>
模型,视图模型和XAML需要什么代码?
答案 0 :(得分:0)
仅在单击按钮时才会执行命令。如果您需要对按钮执行某些操作,那么您应该对包含按钮的窗口执行操作(假设您的按钮位于窗口中)。现在,如果您想坚持MVVM模式,那么您不应该使用Window.OnLoaded,因为这会将代码放在您的代码中。一种选择是使用System.Windows.Interactivity,您可以单独下载。这是它的样子:
<Window x:Class="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr
-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding ...}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Window>
至于你的Model,View和ViewModel应该是什么,我想你应该在网上查看一些教程。关于如何实现MVVM模式有一些非常好的解释。我发现这个youtube视频非常有用:
答案 1 :(得分:0)
这里有一些MVVM基础知识。你走在正确的轨道上,只是错过了一步。视图模型中的Command实现应该(可能)接受两个输入:一个表示正在执行的代码的Action,以及一个返回true / false的Predicate,它是否可以执行Action块中的代码。因此,在您的视图模型中,按照以下方式定义命令(注意:这是我的一个项目中的示例):
this.executeCommand = new RelayCommand(this.OnExecuteClicked, this.OnCanExecuteChanged);
OnCanExecuteChanged方法将根据您设置的任何条件返回bool。因此,如果您希望在已正确设置属性A和属性B时启用提交按钮,则返回true,否则返回false。您的命令实现的内部工作将负责其余的工作。搜索RelayCommand实现(如果您还没有)或DelegateCommand以获取更多样本。