Support for multiple display mode menus in Silverlight Prism

Assume a standard desktop explorer style app:

  • top menu
  • left navigation tree
  • View Position Right

and everything is neatly divided into modules for menus, navigation and elements.

The menu has a general selection of the menu "View" → "Display mode", which changes the current view of the element between:

  • View Icons
  • "List"
  • "Detailed view"

To catch the change in display type, I am currently publishing and subscribing to the DisplayModeChanged event.

First problem:

, , . , ?

:

, ?

+3
1

, , - . " ", , " " . , .

, , , - "ItemViewDisplayModeSetting", , , , .

, , . , . ( ) , , . , . :

interface IActiveViewsService : INotifyPropertyChanged
{
    bool HasActiveViewsSupportingDisplayMode { get; }
}

interface IDisplayModeService : INotifyPropertyChanged
{
    DisplayMode DisplayMode { get; }
}

//your item view presenter (view model)
class ItemViewModel
{
    public ItemViewModel(IDisplayModeService displayModeService)
    {
        //obtain initial setting
        //subscribe to property changes
    }
}

//your menu presenter (view model)
class MenuViewModel
{
    public MenuViewModel(IActiveViewsService activeViewsService)
    {
        //obtain initial setting
        //subscribe to property changes
    }
}

- ... IDisplayModeService, . , DisplayMode, . IActiveViewsService, , , IRegionManager PRISM ... .

interface IDisplayModeEditor
{
    void ChangeDisplayMode(DisplayMode newMode);
}

//your final menu presenter (view model)
class MenuViewModel
{
    public MenuViewModel(IActiveViewsService activeViewsService, IDisplayModeEditor modeEditor)
    {
        //obtain initial setting
        //subscribe to property changes
    }
}

//your final menu presenter (view model)
class DisplayModeStorage : IDisplayModeService, IDisplayModeEditor
{
    private DisplayMode displayMode;

    public DisplayMode DisplayMode 
    { 
        get { return this.displayMode; } 

        //standard propertychange notification
        set
        {
             if(value == this.displayMode)
                return;

             this.displayMode = value;
             this.RaisePropertyChanged("DisplayMode");
        }
    }

    public void ChangeDisplayMode(DisplayMode newMode)
    {
         this.DisplayMode = newMode;
    }
}

.

+2

Source: https://habr.com/ru/post/1762156/


All Articles