0

最初に詳細を説明し、次に何をしようとしているのかを説明します。

NewPersonViewModel にメソッドがあります

private void AddNewPerson()
{
     // code to get Panoroma
     // more code to get the active panorama item
    _navigationService.NavigateTo(new Uri(@"/View/NewPerson.xaml", UriKind.Relative));
}

しかし、メインページのパノラマへの参照を取得する方法がわかりません。

次のように、別の ViewModel のプロパティを取得する方法を知っています。

var mainvm = (new ViewModelLocator()).Main;
mainvm.Milestones.Add(NewMilestone);

ただし、上記の Milestones プロパティとは異なり、Panorama は mainpage.xaml 内の単なる UI コントロールであり、コードから取得するものとしては利用できません。

私はMVVMlightを使用しています。

彼らはこの建物のインターネット アクセスを遮断しているようです。送信しなければなりません。スティーブ

4

2 に答える 2

0

ビューモデルでSelectedIndexを取得したい場合は、それに直接バインドできるはずです。

あなたのxamlで:

<phone:Panorama SelectedIndex="{Binding SelectedPageIndex, Mode=OneWyToSource}">
    <!-- items -->
</phone:Panorama>

ビューモデルで

private int _index;
public int SelectPageIndex
{
    get { return _index; }
    set { _index = value; }
    // no need for property changed event if only getting
}

プロパティへのアクセスから必要なときに

int currentPage = SelectedPageIndex;
string uri = string.Format("/View/NewPerson.xaml?type={0}", currentPage);
_navigationService.NavigateTo(new Uri(uri, UriKind.Relative));

バインドできない場合は、SelectionChangedイベントをサブスクライブし、そのイベント ハンドラーから SelectedPageIndex を設定できます。

private void OnSelectionChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs)
{
    ViewModel.SelectedPageIndex = CCPanorama.SelectedIndex;
}
于 2013-09-27T17:18:21.753 に答える
0

一般に、MVVM のポイントは、ViewModel が View と直接対話しないことです。ビューに何かを表示する必要がある場合は、ViewModel へのデータ バインディングがあります。

コードに関しては、解決策は、ViewModelLocator を介して、View のコード ビハインド コンストラクターで設定した ViewModel にパブリック プロパティを作成することです。そうすれば、ViewModel への参照を持つ人は誰でも、その特定の View への参照を持ちます。


PanoramaViewModel.cs

    ViewModel {
        public Panorama m_Panorama {get;set;}
        ...
    }

PanoramaView.xaml

    <phone:Panorama x:Name="AddPersonPanorama">
    ...
    </phone:Panorama>

PanoramaView.xaml.cs

    PanoramaView {
        PanoramaView() {
            App.ViewModelLocator.ViewModel.m_Panorama = this.AddPersonPanorama;
        }

    }

ReferenceToPanorama.cs

    Class {
        App.ViewModelLocator.ViewModel.m_Panorama.DoSomething();
    }

MVVMを読んで、これを達成するためのよりMVVM的な方法を考えることをお勧めします。幸運を!

于 2013-09-27T03:39:24.800 に答える