1

viewmodel を含む page1.xaml という xaml ファイルを含む WP7application アプリがあります。xaml ファイルには、バインド コマンドを含むボタンが含まれています。

エミュレーターを起動し、別のプロジェクトにある上記の page1.xaml ファイルを表示する必要がある sampleapplication という別のプロジェクトがあります。

を使用して、現在のプロジェクトのwp7アプリから上記のxamlファイルをロードできます

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/WP7application ;component/Views/page1.xaml", UriKind.Relative));

しかし、xaml がロードされた後、イベントを操作できません。現在のプロジェクトでボタンを機能させるにはどうすればよいですか?

現在のサンプル アプリケーションに wp7 アプリ ビューとビューモデルへのすべての参照を追加しました。

4

2 に答える 2

0

ビューのDataContextがビューモデルのインスタンスに設定されていないように聞こえます。これを行うにはいくつかの方法があります。

最も簡単なのは、ビューのLoadedイベントに次のコードを配置することです。

private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    DataContext = new ViewModel();
}

推奨される方法は、アプリケーションプロジェクトでビューモデルロケーターを定義することです。ビューモデルのインスタンスを作成します。

public class ViewModelLocator
{
    private readonly ViewModel _viewModel = new ViewModel();

    public ViewModel Main
    {
        get { return _viewModel; }
    }
}

App.XAMLでビューモデルロケーターを作成します。

<Application xmlns:vm="clr-namespace:groovd.client.phone.ViewModels" >
    <Application.Resources>
        <ResourceDictionary>
            <vm:ViewModelLocator xmlns:vm="clr-namespace:MyApp.ViewModels" x:Key="Locator" />
        </ResourceDictionary>
    </Application.Resources>
</Application>

次に、ページのビューモデルロケーターからプロパティを取得します。

<phone:PhoneApplicationPage 
    DataContext="{Binding Main, Source={StaticResource Locator}}">
</phone:PhoneApplicationPage>
于 2012-12-13T19:22:02.797 に答える
0

ビューとビュー モデルを別々のアセンブリに簡単に配置できますが、ビューを含むアセンブリ (アプリまたはライブラリ) には、ビュー モデルが含まれるライブラリへの参照が必要です。

ただし、注意すべき点が 2 つあります
。 1. ビューとビュー モデルに異なるアセンブリを使用している場合、ビュー モデルはメイン アプリケーションではなくクラス ライブラリにある必要があります。
2. 循環参照がないようにコードを構成してください。(これは、複雑さが増すにつれて回避するための規律が必要になる場合があります。)

于 2012-12-13T14:02:06.730 に答える