2012-09-25 70 views
6

Windows Loadedイベントでいくつかの情報をロードする必要があるWPFプロジェクトがWindows 2012にあります。私は、CodeBehindではなくView Modelでこれを行う必要があります。私のXAMLでWindow LoadedおよびWPF

:私は、次のコードを使用しようとしています私のビューモデルで

<interactivity:Interaction.Behaviors> 
    <behaviors:WindowLoadedBehavior LoadedCommand="{Binding WindowLoadedCommand}" /> 
</interactivity:Interaction.Behaviors> 

private DelegateCommand _WindowLoadedCommand; 

public DelegateCommand WindowLoadedCommand 
{ 
    get 
    { 
     return _WindowLoadedCommand; 
    } 
    private set 
    { 
     _WindowLoadedCommand = value; 
    } 
} 

public ShellViewModel() 
{ 
    WindowLoadedCommand = new DelegateCommand(WindowLoadedAction); 
} 

protected void WindowLoadedAction() 
{ 
    ... 
} 

マイ添付行動:

public class WindowLoadedBehavior : Behavior<FrameworkElement> 
{ 
    [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1401:FieldsMustBePrivate", Justification = "Dependency Property. Allow public.")] 
    public static DependencyProperty LoadedCommandProperty = DependencyProperty.Register("LoadedCommand", typeof(ICommand), typeof(WindowLoadedBehavior), new PropertyMetadata(null)); 

    public ICommand LoadedCommand 
    { 
     get { return (ICommand)GetValue(LoadedCommandProperty); } 
     set { SetValue(LoadedCommandProperty, value); } 
    } 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.Loaded += AssociatedObject_Loaded; 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.Loaded -= AssociatedObject_Loaded; 

     base.OnDetaching(); 
    } 

    private void AssociatedObject_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (LoadedCommand != null) 
      LoadedCommand.Execute(null); 
    } 
} 

OnAttached、 AssociatedObject_LoadedとLoadedCommand getはすべて起動していますが、LoadedCommandセットは起動していません。明らかに、WindowLoadedCommandは起動していません。私はこれを稼働させるために何ができるのか?

+1

あなたはコマンドに直接バインドしていませんか? –

+0

私が読んだことから、何らかの理由でWindow Loadedイベントを直接バインドできません。 –

答えて

28

いくつかのオプションがあります。ここに記載されているそれらのカップル:

how to call a window's Loaded event in WPF MVVM?

しかし、あなたや他の誰かが、あなたは30秒をとっている必要がありますタスクを完了するのに数時間を費やしていることを気にオフのチャンスで、あなたがしようとする場合があります代わりにこれ。

public MainWindow() 
{ 
    InitializeComponent(); 

    this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
} 

void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    ShellViewModel.Instance.WindowLoadedCommand.Execute(null); 
} 
+2

それは完璧でした!どうやら私が実行していた問題は、ウィンドウがロードされる前にイベント処理クラスが正しくロードされていないことです。あなたの方法(短いとポイントと一緒に)を回避し、それが正しく発射することができました。 –

関連する問題