Сохранение состояния пользовательского контроля в приложении UWP с помощью шаблона 10

Я создаю приложение UWP с использованием шаблона 10. Я создал подобный пользовательский элемент управления.

введите описание изображения здесь

 <my:DeviceInfoUserControl  OnEndpointTypeChange="{Binding OnEndpointTypeChangeCommand}" Component="{Binding DeviceManagementViewModel,Mode=TwoWay}"></my:DeviceInfoUserControl>

У меня есть радио-кнопки на пользовательском элементе управления. Я добавил пользовательский контроль на нескольких экранах.

Этот пользовательский элемент управления имеет свою собственную ViewModel, а также некоторые свойства зависимостей, а именно:

public class DeviceManagementViewModel : ViewModelBase
{

}
public sealed partial class DeviceInfoUserControl : UserControl
{
    public bool IsToggled = true;
    public DeviceInfoUserControl()
    {
        this.InitializeComponent();
    }

    public static readonly DependencyProperty OnEndpointTypeChangeProperty =
      DependencyProperty.Register(
          "OnEndpointTypeChange",
          typeof(ICommand),
          typeof(DeviceInfoUserControl), new PropertyMetadata(null));

    public ICommand OnEndpointTypeChange
    {
        get { return (ICommand)GetValue(OnEndpointTypeChangeProperty); }
        set { SetValue(OnEndpointTypeChangeProperty, value); }
    }

    public static readonly DependencyProperty ComponentProperty = DependencyProperty.Register("Component", typeof(DeviceManagementViewModel), typeof(DeviceInfoUserControl), new PropertyMetadata(null));

    public DeviceManagementViewModel Component
    {
        get { return (DeviceManagementViewModel)GetValue(ComponentProperty); }
        set { SetValue(ComponentProperty, value); }
    }
}

Я хочу сохранить выбор переключателя на всех экранах. Как мне этого добиться?


person Mangesh Kulkarni    schedule 24.08.2016    source источник
comment
Итак, вы хотите выбрать радиокнопку на всех элементах управления одним щелчком мыши?   -  person Tóth Tibor    schedule 24.08.2016
comment
Да ... Что-то вроде модели представления, которая может быть доступна глобально ... Так что, если я поставлю переключатель, его выбор будет отражаться повсюду   -  person Mangesh Kulkarni    schedule 24.08.2016
comment
SessionState встроен в ViewModelBase   -  person mvermef    schedule 26.08.2016
comment
Вам понадобится что-то вроде EventAggregator для передачи сообщений. ознакомьтесь с примером Mvvm Light, а также с примером обмена сообщениями   -  person mvermef    schedule 29.08.2016


Ответы (2)


Вы должны убедиться, что один и тот же экземпляр ViewModel используется для всех экземпляров элемента управления. Способ XAML всегда создает новый экземпляр:

<Page.DataContext>
    <vm:DetailPageViewModel x:Name="ViewModel" />
</Page.DataContext>

В классе Template10 Bootstrapper с переопределением метода ResolveForPage вы можете внедрить ViewModel после навигации по странице с помощью настраиваемой логики или с помощью внедрения зависимости ССЫЛКА

person Tóth Tibor    schedule 26.08.2016

Не знаю, лучше это или нет, но я добился этого, сделав Singletone Viewmodel.

 public class DeviceManagementViewModel : ViewModelBase
 {
    public static readonly DeviceManagementViewModel _instance = new DeviceManagementViewModel ();
    private DeviceManagementViewModel ()
    {

    }
/*Properties and Methods */

}

В модели просмотра родительского экрана я создал следующее свойство

 private DeviceManagementViewModel  _deviceManagementViewModel;
        public DeviceManagementViewModel DeviceManagementViewModel1
        {
                    get { return _deviceManagementViewModel; }
                    set { Set(ref _deviceManagementViewModel, value); }
        }

У меня есть экземпляр свойства в конструкторе:

  public ConfigurationViewModel()
  {
    DeviceManagementViewModel1 = DeviceManagementViewModel._instance;
  }

И о пользовательском контроле:

<my:DeviceInfoUserControl  OnEndpointTypeChange="{Binding OnEndpointTypeChangeCommand}"  Component="{Binding DeviceManagementViewModel1,Mode=TwoWay}"></my:DeviceInfoUserControl> 
person Mangesh Kulkarni    schedule 29.08.2016