-1

私は誰かが私を助けることができると確信している単純な問題を抱えています。accountIDメソッドで変数をINavigationAware使用してから、別のクラスで使用するにはどうすればよいですか?

以下は私のコードです:

ViewModel関連コード(HistoryAuditLogViewModel.cs):

#region Private Fields

private DatabaseConnectionSetting dbSetting;
private string tableName = "Manufacturers";
private int primaryKeyID = 1;
private string entryID;
private string manufacturerID;
private string manufacturerName;
private string auditDate;
private string sqlLogin;
private string application;
private List<string> dataList;
private string dbConnectionKey = Alliance.Infrastructure.Common.DatabaseConnectionSetting.BACKFLOW_SCOPE_KEY;
private int ShowAuditLogForPrimaryID { get; set; }
private int initialAuditID;
private int _accountID;

private string xmlString()
{
    return "<row EntryID=\"" + entryID + "\" ManufacturerID=\"" + manufacturerID + "\" ManufacturerName=\"" + manufacturerName + "\" AuditDate=\"" + auditDate + "\"  SqlLogin=\"" + sqlLogin + "\" Application=\"" + application + "\" />";
}

private DataSet _dataSet;

#endregion

#region Public Fields

public DataSet dataSet
{
    get { return _dataSet; }
    set { _dataSet = value; }
}

public int accountID
{
    get { return _accountID; }
    set { _accountID = value; }
}

#endregion

#region INavigationAware Members

        bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
        {
            string tableName;
            string holdStringValue;

            holdStringValue = navigationContext.Parameters["primarykey"];
            if (holdStringValue == null ||
                !Int32.TryParse(holdStringValue, out accountID))
            {
                accountID = 0;
            }

            if (accountID == this.ShowAuditLogForPrimaryID)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
        {
        }

        void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
        {
            string holdStringValue;
            int accountID;
            initialAuditID = 0;

            holdStringValue = navigationContext.Parameters["TableName"];
            if (holdStringValue == null ||
                !Int32.TryParse(holdStringValue, out initialAuditID))
            {
                initialAuditID = 0;
            }

            holdStringValue = navigationContext.Parameters["AccountID"];
            if (holdStringValue != null &&
                Int32.TryParse(holdStringValue, out accountID))
            {
                this.ShowAuditLogForPrimaryID = accountID;
            }
            else
            {
                this.ShowAuditLogForPrimaryID = 0;
            }

            Load_Audit();
        }

        #endregion INavigationAware Members

accountIDこれらのメソッドで設定されているとテーブル名を使用する必要があります。少なくとも、それが設定されている場所だと思います。私は一度も使用したことがないINavigationので、それがどのように機能するかについて少し混乱しています。

ここで、ViewModel(CoreModuleDesktop)の変数を使用できるようにする必要があります。

 this.NavManager.RegisterCommonActionItem("History Audit Log", "AuditLog", 110,
               new BitmapImage(new Uri("pack://application:,,,/Core;component/Resources/maintenance.png")),
                   new Action(() => 
                    {
                        IRegionManager regionManager = AllianceApp.Container.GetExportedValue<IRegionManager>();
                        UriQuery query = new UriQuery();

                        query.Add("AccountID", accountID.ToString());
                        //query.Add("ServiceOrderID", tableName.ToString());

                        regionManager.RequestNavigate(RegionNames.MainRegion, new Uri(typeof(HistoryAuditLogView).FullName + query.ToString(), UriKind.Relative));
                        }));
                  }

基本的に、これにより、ViewModelでクエリを実行して、クエリの結果をデータグリッドビューに配置できます。どんな助けでもありがたいです。

4

3 に答える 3

1

のパブリックゲッターとセッターはすでに定義されていますaccountIDHistoryAuditLogViewModelクラスのインスタンスを作成することで、変数にアクセスできるはずです。

繰り返しになりますが、あなたの質問の形式は非常に貧弱です。関連するコードについてコメントしたとき、クラス全体を投稿するだけでよいという意味ではありませんでした。コードの特定の問題点を見つける必要があります。これまでにINavigationを使用したことがないとおっしゃいました。プログラムにコードを入れる場合は、それが何であるか、そしてそれがどのように機能するかを理解する必要があります。

何を試しましたか?特定のエラーが発生していますか?ここであなたが自分で問題を試みたとは思いません。ここで何を達成しようとしているのかを理解するのは非常に困難であるため、ある程度の有用性をもって質問に答えることは非常に困難です。

于 2013-03-04T15:20:12.520 に答える
0

DNHと同じように、実際には問題が発生しないでください。

しかし、おそらくあなたの問題はもっと「私のビューモデルインスタンスにアクセスする方法」です。

この場合、MVVMのメッセージングパターンを使用するか、アプリ全体の値を格納するシングルトンインスタンスを作成するか、静的プロパティを使用できます。

ビューモデルインスタンスへの参照がない場合は、IMO、メッセージング、またはシングルトン「リポジトリ」がより適切な選択肢です。

于 2013-03-04T15:15:36.453 に答える
0

O_oわかりました、私の答えは管理者によって削除されました。理由はわかりませんが、今問題が発生していると思います。以下をご覧ください。

public interface ITest 
{
  void Test(string testInput);
}

public class TestImpl : ITest
{
  public int TestId { get; private set; }

  void ITest.Test(string testInput)
  {
    int intOut; //I think this is your point of confusion, right?
    if (!int.TryParse(testInput, out intOut))
      return;

    TestId = intOut; 
  } 
}
于 2013-03-04T15:23:05.553 に答える