3

ボタンをクリックしてページに移動し、リストボックス項目をクリックし、新しいページのボタンをクリックして、最初のページの新しい URI を作成せずにページに戻します。

        **First Page**
        private void btnAddExistingMember_Click(object sender, RoutedEventArgs e)
        {
              NavigationService.Navigate(new Uri("/ChooseMember.xaml", UriKind.Relative));
        }

        **Second page after choosing listbox value**
        private void btnAddSelected_Click(object sender, RoutedEventArgs e)
        {
              Member currMember = (Member)lstMembers.SelectedItem;
              string memberID = currMember.ID.ToString();
              //navigate back to first page here passing memberID
        }

それはできますか?

ありがとうございました

4

5 に答える 5

3

メンバーは App.xaml.cs ファイルに格納できます。これは、アプリケーション内のすべてのファイルにアクセスできる共通ファイルです。これはグローバル変数のように機能します。

//App.xaml.cs
int datafield ;

//Page1xaml.cs
(App.Current as App).dataField =10;

//Page2.xaml.cs
int x =  (App.Current as App).dataField 
于 2012-04-25T13:27:57.467 に答える
2

You could create a manager class that would hold the member id. This manager class could then be accessed from both your first page and ChooseMember page.

An example of a Singleton Manager class :-

public class MyManager
{
    private static MyManager _instance;

    public static MyManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new MyManager();
            }
            return _instance;
        }
    }
}
于 2012-04-25T13:20:38.370 に答える
1

別のページのコンテキストとしてオブジェクトを設定したいように思えます。MVVM Lightでのメッセージングは​​、このための優れたソリューションのように思えます。MVVMを使用しているようには見えないため、すぐには適用できない可能性があります。この投稿は、私がここで言っていることをほぼ示しています。

2番目のページ
SelectedObjectプロパティを作成し、必ず呼び出します

RaisePropertyChanged(SelectedObjectPropertyName, oldValue, value, true);

最後のパラメータtrueは、この値の変化を聞いている人にブロードキャストすることを示しています。リストボックスで選択した項目やボタンのクリックなどについては、他のコマンドを接続する必要がありますが、質問とは直接関係がないため、ここでは説明しません。リストボックス項目を選択すると、実行したい最初のページのデータ項目が設定されます。ボタンクリックでナビゲーションを処理できます。

最初のページ
ビューモデルコンストラクターで、2番目のページからブロードキャストされた変更を受信するために登録します

Messenger.Default.Register<PropertyChangedMessage<MyObject>>(this, (action) => UpdateObject(action.NewValue));

次に、UpdateObjectを定義します

private void UpdateObject(MyObject newObject)
{
    LocalObjectProperty = newObject;
}
于 2012-04-26T00:38:27.163 に答える
1

簡単に使用できます

//first page
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    string value = string.Empty;
    IDictionary<string, string> queryString = this.NavigationContext.QueryString;
    if (queryString.ContainsKey("memberID"))
    {
        memberID = queryString["memberID"];
        if (memberID != "-1")
            //your code here
    }
    base.OnNavigatedTo(e);
}

//second page
private void btnAddSelected_Click(object sender, RoutedEventArgs e)
{
    Member currMember = (Member)lstMembers.SelectedItem;
    string memberID = currMember.ID.ToString();

    string target = "/FirstPage.xaml";
    target += string.Format("?memberID={0}", memberID);
    NavigationService.Navigate(new Uri(target, UriKind.Relative));
}
于 2013-01-17T05:59:18.970 に答える