0

ビュー モデルを使用して C# で簡単なアプリケーションを作成しました。通常は、ウィンドウまたはユーザー コントロールのデータ コンテキストでビュー モデルを宣言してロードする必要があります。問題は、ビジュアルスタジオでアプリケーションが開かれるたびに読み込まれることです。

アプリケーションの実行中にウィンドウがロードされたときにロードしたい。

<Window x:Class="GraphApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ViewModel="clr-namespace:GraphApp"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <!-- Insert Model view Here. I want it to load when the window is running, not when I have it opened in visual studio.-->

    </Window.DataContext>

これは可能ですか?

4

3 に答える 3

4

一般に、要素がロードされた後に何かを発生させたい場合は、次のようにFrameworkElement.Loadedイベントを処理します。

public MainWindow()
{
    InitializeComponent();
    Loaded += MainWindow_Loaded;
}

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    DataContext = new ViewModel();
}

更新 >>>

これを実現する別の方法は、いくつかDataTemplateの を設定し、ビュー モデルのタイプまたは共通の基本ビュー モデル クラスのいずれかのプロパティを持つことです。

public BaseViewModel ViewModel { get; set; } // Implement INotifyPropertyChanged here

次にApp.xaml Resources

<DataTemplate DataType="{x:Type ViewModels:FirstViewModel}">
    <Views:FirstTrackView />
</DataTemplate>
...
<DataTemplate DataType="{x:Type ViewModels:LastViewModel}">
    <Views:LastTrackView />
</DataTemplate>

DataContext次に、この方法で好きなときに暗黙的に設定すると、対応するビューが自動的に表示されます。

ViewModel = new SomeViewModel();
于 2013-11-06T15:12:02.330 に答える
0

Window.Loadedイベントに添付して、次のことを行います。

void OnLoad(object sender, RoutedEventArgs e)
{
    //Check if the event is not raised by the visual studio designer
    if(DesignerProperties.GetIsInDesignMode(this))
      return;

    //Set the data context:
    this.DataContext = //Your viewmodel here
}
于 2013-11-06T15:15:17.107 に答える