是否可以触发命令来通知窗口已加载。 另外,我没有使用任何MVVM框架(框架在这个意义上,卡利,缟玛瑙,MVVM工具包等)如何在wpf中加载窗口时触发命令
回答
为了避免后面的代码在你的浏览,请使用Interactivity库(System.Windows.Interactivity dll,您可以从Microsoft免费下载 - 也附带Expression Blend)。
然后,您可以创建一个执行命令的行为。这样触发器调用调用命令的行为。
<ia:Interaction.Triggers>
<ia:EventTrigger EventName="Loaded">
<custombehaviors:CommandAction Command="{Binding ShowMessage}" Parameter="I am loaded"/>
</ia:EventTrigger>
</ia:Interaction.Triggers>
的commandAction(也使用System.Windows.Interactivity)可以看起来像:
public class CommandAction : TriggerAction<UIElement>
{
public static DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(CommandAction), null);
public ICommand Command
{
get
{
return (ICommand)GetValue(CommandProperty);
}
set
{
SetValue(CommandProperty, value);
}
}
public static DependencyProperty ParameterProperty = DependencyProperty.Register("Parameter", typeof(object), typeof(CommandAction), null);
public object Parameter
{
get
{
return GetValue(ParameterProperty);
}
set
{
SetValue(ParameterProperty, value);
}
}
protected override void Invoke(object parameter)
{
Command.Execute(Parameter);
}
}
我刚刚意识到这个代码是针对Silverlight的。如果你可以在WPF中找到等价的触发器/行为,我会认为同样的主体应该可以工作。 – programatique 2010-08-04 21:16:54
而不是CommandAction,现在似乎有一个现有的操作,[InvokeCommandAction](http://msdn.microsoft.com/en-us/library/system.windows.interactivity.invokecommandaction(Expression.40).aspx ) – Patrick 2012-05-02 15:59:08
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ApplicationCommands.New.Execute(null, targetElement);
// or this.CommandBindings[0].Command.Execute(null);
}
和XAML
Loaded="Window_Loaded"
我忘了提及我正在使用MVVM。何时加载窗口。它应该激发一个命令,我可以在我的ViewModel类中侦听。 – 2010-08-04 17:47:59
MVVM不是一种宗教。你可以在CodeBehind中添加一行代码,这个世界仍然在旋转。 – 2010-08-04 18:28:13
你确定!你确定它会继续旋转吗? :) – GONeale 2012-06-12 05:38:09
使用行为一个更通用的方法,提出了在AttachedCommandBehavior V2 aka ACB它甚至还支持多种事件到命令绑定,
下面是使用一个非常简单的例子:
<Window x:Class="Example.YourWindow"
xmlns:local="clr-namespace:AttachedCommandBehavior;assembly=AttachedCommandBehavior"
local:CommandBehavior.Event="Loaded"
local:CommandBehavior.Command="{Binding DoSomethingWhenWindowIsLoaded}"
local:CommandBehavior.CommandParameter="Some information"
/>
- 1. WPF触发命令
- 2. 跟踪“命令”通过触摸板发送到WPF窗口(竹)
- 3. 如何在WPF中通过触发器关闭窗口
- 4. 触发事件从另一个WPF窗口WPF窗口
- 5. WPF窗口预加载
- 6. 如何发送备份或恢复命令到命令窗口
- 7. 当窗体加载时触发wpf组合更改事件
- 8. WPF usercontrol命令绑定到窗口viewmodel
- 9. 使用命令打开窗口(WPF)
- 10. 如何从命令行在iTerm窗口中执行命令?
- 11. 如何在WPF中失去焦点时触发文本框命令?
- 12. 在弹出窗口动画运行时WPF窗口消息未触发
- 13. WPF窗口:sizechanged事件触发两次
- 14. MFC命令窗口命令
- 15. 如何在WPF窗口中加载Xaml文件?
- 16. 在WPF窗口加载多个UserControls
- 17. 如何清除在命令窗口
- 18. C#/ WPF:键绑定不触发命令
- 19. 在命令窗口中运行rcp时如何从命令行获取参数?
- 20. 如何在wpf中弹出子窗口时模糊父窗口
- 21. 主WPF窗口如何知道次WPF窗口何时关闭
- 22. WPF - CanExecute dosn't在从UserControl提升命令时触发
- 23. 何时使用命令窗口
- 24. WPF弹出式事件处理 - 如何在弹出窗口打开时触发
- 25. 从命令行触发窗口更新(wuauclt.exe替代)
- 26. 如何在构建后触发命令?
- 27. 使用命令提示符加载我的WPF窗口应用程序
- 28. 如何让WPF ItemsControl项目在按空格键时触发命令?
- 29. 如何在窗口加载时加载组合框项目
- 30. 如何使用数据触发器更改WPF窗口背景?
几乎所有事件可能不火ViewModel中的命令。你可以接受这个事实,并在CodeBehind中写入1行代码,或者实现一些模糊的模式,在几行复杂的代码行之后执行相同的操作。 #dontbeapurist – 2010-08-04 18:24:08
我不同意@EduardoMolteni。如果事件与数据工作相关,那么您需要在后面的代码中使用虚拟机,这可以通过WPF中的行为轻松避免。 – JoanComasFdz 2012-12-12 12:44:12