我正在开发使用MVVM Light的WP8.1应用程序。基本上它工作正常。除了导航的奇怪行为。我在VM中有一个命令,该命令绑定到列表的selectionChanged事件:
private void GoToTransactionList()
{
if (SelectedAccount != null)
{
((Frame)Window.Current.Content).Navigate(typeof(TransactionList));
}
}
View没有任何代码,整个内容都在用户控件上。 这是VM:
public class TransactionListUserControlViewModel : ViewModelBase
{
private Account SelectedAccount
{
get { return ServiceLocator.Current.GetInstance<AccountDataAccess>().SelectedAccount; }
}
public ObservableCollection<FinancialTransaction> RelatedTransactions
{
get { return ServiceLocator.Current.GetInstance<TransactionDataAccess>().RelatedTransactions; }
}
public RelayCommand LoadRelatedTransactionsCommand { get; private set; }
public TransactionListUserControlViewModel()
{
LoadRelatedTransactionsCommand = new RelayCommand(LoadRelatedTransactions);
}
private void LoadRelatedTransactions()
{
ServiceLocator.Current.GetInstance<TransactionDataAccess>().GetRelatedTransactions(SelectedAccount.Id);
}
public void Dispose()
{
this.Cleanup();
}
}
我的定位器看起来像这样:
public TransactionListUserControlViewModel TransactionListControl
{
get { return new TransactionListUserControlViewModel(); }
}
或者:
public TransactionListUserControlViewModel TransactionListControl
{
get { return ServiceLocator.Current.GetInstance<TransactionListUserControlViewModel>(); }
}
我试过了两个。但是不要改变这种行为。
现在,我第一次导航到List,我必须单击后退按钮一次导航回来。如果我再次浏览页面,我必须单击两次,依此类推。换句话说,View不会被处理,但是每次我导航到视图时都会生成一个新的obect。我认为这取决于虚拟机上缺少的东西。
为了更好地概述,我在这里添加了github Repo的链接。
谁能告诉我我忘记了什么?
感谢您的帮助!
答案 0 :(得分:1)
我发现了这个错误。它是由我的UserControl中的绑定引起的。因此,当您向后导航时,它会再次设置该值并再次导航,直到该值设置为null(总是在x次之后,x是到页面的导航次数^^)。
使用selectedItem的单独变量修复它并在navigationCommand中使用它:
private void GoToTransactionList()
{
if (SelectedItem != null)
{
SelectedAccount = SelectedItem;
((Frame)Window.Current.Content).Navigate(typeof(TransactionList));
SelectedItem = null;
}
}