【问题标题】:Windows Phone - How to refresh viewmodel when navigating backWindows Phone - 导航返回时如何刷新视图模型
【发布时间】:2014-06-04 16:06:33
【问题描述】:

我有两个 ViewModel,第一个有一个 ProductViewModel 类型的列表,这个 ProductViewModel 类型的列表由我的模型中的一个 Product 类型的列表支持。

public List<ProductViewModel> Products
{
    get
    {
        return (from product in ProductManager.Products
               select new ProductViewModel(product)).ToList();
    }
}

我的第一个 ViewModel 会将产品添加到 ProductManager.Products 列表中,然后引发 PropertyChanged 通知,以便更新 UI。 (到目前为止一切顺利)。

然后导航到第二个页面,然后访问 ProductManager.Products,一旦处理了这些产品,就会清除 ProductManager.Products 列表(由第二个 ViewModel)。

导航回第一个视图后,我将如何更新 List Products 绑定?

我使用的是 MVVMLight 提供的 ViewModelLocator,因此无法从第二个 ViewModel 静态访问第一个 ViewModel。

我当前的解决方法是创建一个 BaseView 页面,覆盖 OnNavigatedTo 方法,在此覆盖中引发一个事件,然后我可以在我的第一个 ViewModel 中绑定一个命令,这样我就可以调用 RaisePropertyChanged。

public class BaseView : PhoneApplicationPage
{
    public event RoutedEventHandler NavigatedTo;
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        if (NavigatedTo != null)
        {
            NavigatedTo(this, new RoutedEventArgs());
        }
    }
}

    <i:EventTrigger EventName="NavigatedTo">
        <cmdextras:EventToCommand Command="{Binding Path=PerformNavigatedTo}" />
    </i:EventTrigger>

    public ICommand PerformNavigatedTo
    {
        get
        {
            return new RelayCommand(
                () =>
                {
                    RaisePropertyChanged(() => Products);
                    RaisePropertyChanged(() => SecondaryPageName);
                },
                () => true);
        }
    }

【问题讨论】:

  • 您还有疑问,或者您的问题解决了吗?您可以在您的 VM 上使用从您的第一页 OnNavigatedTo 方法调用的 Refresh 方法,而不是使用事件触发器等。更简单的方法

标签: windows-phone-8 mvvm mvvm-light


【解决方案1】:

除了上面的解决方法之外,我之前还研究过在 ViewModel 之间实现消息传递。不幸的是,这对我不起作用,因为我在调用 Register 方法时忘记包含令牌。一旦我解决了这个问题,我就能够从第二个 ViewModel 发送一条消息,让第一个 ViewModel 接收,因此根据需要调用 RaisePropertyChanged 方法。

此外,当我意识到 SimpleIoC 在多次调用 GetInstance 后返回同一个实例时,这有助于我理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2014-12-10
    • 2019-06-16
    相关资源
    最近更新 更多