是否可以觸發命令來通知窗口已加載。 另外,我沒有使用任何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