是否可以触发命令来通知窗口已加载。 另外,我没有使用任何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命令与事件触发命令
- 5. WPF window_loaded事件触发但窗口未加载
- 6. WPF CollectionView.CurrentChanged在加载时触发事件
- 7. 如何加载更快的WPF窗口?
- 8. 验证WPF关闭窗口在窗口加载时失败
- 9. 如何在WPF中通过触发器关闭窗口
- 10. 触发事件从另一个WPF窗口WPF窗口
- 11. WPF BackgroundWorker主窗口加载时
- 12. IronPython WPF加载新窗口
- 13. WPF - window.ShowDialog窗口内。加载
- 14. WPF窗口预加载
- 15. WPF:从XAML加载窗口
- 16. 窗口加载和WPF
- 17. 如何发送备份或恢复命令到命令窗口
- 18. 加载动画在新窗口时WPF数据网格加载
- 19. 当窗体加载时触发wpf组合更改事件
- 20. WPF usercontrol命令绑定到窗口viewmodel
- 21. 使用命令打开窗口(WPF)
- 22. show()命令不会打开窗口Wpf
- 23. 加载窗口时出现黑色空白窗口WPF
- 24. 如何知道窗口“加载”事件是否已被触发
- 25. 如何从命令行在iTerm窗口中执行命令?
- 26. 如何在WPF中失去焦点时触发文本框命令?
- 27. WPF窗口:sizechanged事件触发两次
- 28. 在弹出窗口动画运行时WPF窗口消息未触发
- 29. 如何在单独的python窗口中发送命令
- 30. 如何在WPF窗口中加载Xaml文件?
几乎所有事件可能不火ViewModel中的命令。你可以接受这个事实,并在CodeBehind中写入1行代码,或者实现一些模糊的模式,在几行复杂的代码行之后执行相同的操作。 #dontbeapurist – 2010-08-04 18:24:08
我不同意@EduardoMolteni。如果事件与数据工作相关,那么您需要在后面的代码中使用虚拟机,这可以通过WPF中的行为轻松避免。 – JoanComasFdz 2012-12-12 12:44:12