6

2 つのビュー (AddClientView と SuggestedAddressesView) によって参照される AddClientViewModel があります。AddClientView は、アドレスのフィールドを持つフォームです。フォームには、ジオコーディングを使用して入力された住所を検証する検証ボタンがあります。複数の住所が返された場合は、SuggestedAddressesView が開きます。

これが私が現在行っている方法です:

AddClientViewModel:

    private void ValidateExecute(object obj)
    {
        SuggestedAddresses = new ObservableCollection<DBHelper.GeocodeService.GeocodeResult>(GeoCodeTest.SuggestedAddress(FormattedAddress));

        ....

        if (SuggestedAddresses.Count > 0)
        {
            var window = new SuggestedAddressesView(this);
            window.DataContext = this;
            window.Show();
        }
    }

AddClientViewModel が ViewModelBase から継承する SuggestedAddressesView コンストラクターを次に示します。

    public SuggestedAddressesView(ViewModelBase viewModel)
    {
        InitializeComponent();
        viewModel.ClosingRequest += (sender, e) => this.Close();
    }

私が抱えている他の問題は、AddClientViewModel から OnClosingRequest() を呼び出すときです... AddClientView と SuggestedAddressesView の両方が閉じます。これは、両方のビューが同じ ViewModel を参照しているためです。これは私が望む動作ではありません。いずれかのウィンドウを個別に閉じることができるようにしたいと思います。

ViewModel の適切な MVVM 構造からビューを開いていますか? ウィンドウを個別に閉じるにはどうすればよいですか?

4

3 に答える 3

0

ViewModel からウィンドウを開くには:

ウィンドウを開くための NavigationService.cs クラスを作成します。

そのクラスファイルに次のコードを入れます。

   public void ShowWindow1Screen(Window1ViewModel window1ViewModel)
       {
           Window1= new Window1();
           Window1.DataContext = window1ViewModel;
           Window1.Owner = Window1View;
           Window1.ShowDialog();
       }

それから。NavigationService.cs クラスの MainWindowViewModel ファイルのインスタンスを作成します。それで

Window1ViewModel window1ViewModel = new Vindow1ViewModel();
window1ViewModel.Name = MainWindowTextValue;
NavigationService navigationService = new NavigationService();
navigationService.ShowWindow1Screen(window1ViewModel);
于 2015-05-13T08:50:52.233 に答える