2014-10-31 91 views
1

我正在用Windows Phone 8.1应用程序开发MVVMLight。我们有一个按姓氏或名字对用户列表进行排序的设置。在更改此设置(由设置为SettingsViewModel中的属性的ListPicker执行)后,我想调用另一视图模型(OtherViewModel)中的方法来重新排列OtherViewModel相应视图上的用户列表。正在使用settingsStore将分类设置存储在用户的手机上。从一个视图模型调用不同视图模型的方法

我不希望通过var vm = new ViewModel()创建视图模型依赖关系,因为两个视图模型之间没有父/子关系。我被告知委托人是一个不错的选择,但我不太了解如何使用委托实施解决方案。

任何帮助,将不胜感激。

设置查看

<toolkit:ListPicker x:Name="ContactsSortParametersListPicker" 
        ItemsSource="{Binding ContactsSortParameters, Mode=OneTime}" 
        SelectedItem="{Binding ContactsSortParametersSelected, Mode=TwoWay}" 
        SelectionChanged="ContactsSortParametersListPicker_SelectionChanged"/> 

设置查看(代码隐藏)

private void ContactsSortParametersListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
     // want to call method from MainViewModel that updates a list in Main View 
} 

SettingsViewModel

public IEnumerable<SortOptions> ContactsSortParameters 
{ 
    get { return (IEnumerable<SortOptions>)Enum.GetValues(typeof(SortOptions)); } 
} 

private SortOptions _sortContactsParameterSelected; 
public SortOptions ContactsSortParametersSelected 
{ 
    get { return _sortContactsParameterSelected; } 
    set 
    { 
     SetProperty(ref _sortContactsParameterSelected, value); 
     _settingsStore.ContactsSortParameter = _sortContactsParameterSelected; 
    } 
} 

OtherViewModel

public async Task LoadDirectory() 
{ 
    ...relevant logic here... 
} 

回答

1

如果您使用MVVM Light,我假设您的App.xaml资源中有ViewModelLocator实例,如下所示。

<vm:ViewModelLocator xmlns:vm="clr-namespace:WPApp.ViewModel" x:Key="Locator" /> 

在设置查看后面的代码:

private async void ContactsSortParametersListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    await ((ViewModelLocator)App.Current.Resources["Locator"]).OtherViewModel.LoadDirectory(); 
} 
+0

正是我一直在寻找的是新MVVM。谢谢你的帮助! – killQuotes 2014-10-31 21:18:11