La siguiente línea de código en el marco de CM en .net wpf realiza la gestión de varias páginas

  • He hecho una práctica de proyecto wpf antes. El lado izquierdo de la página principal es un cuadro de lista, y la página correspondiente se mostrará después de que se cambie cada selección. El diagrama de la interfaz es el siguiente:

Para lograr tal función, usé el método tradicional para lograrlo antes. En esta sección, uso Conductor<T> bajo el marco CM para lograrlo, de modo que la cantidad de código se puede reducir considerablemente, y el código central es solo una linea

manera tradicional

  Código de fondo:

① Definir una colección y agregar datos:

  public IViewModel ActiveWindowView { get; set; }
        public ObservableCollection<string> ListBoxItems { get; set; } 
        public string SelectedItem { get; set; }

ListBoxItems = new ObservableCollection<string>() { };
            ListBoxItems.Add("ShellView");
            ListBoxItems.Add("EventAggregatorView");
            ListBoxItems.Add("ConductorView");
            ListBoxItems.Add("MatchTemplateView");
            ListBoxItems.Add("IndicatorLightView");
            ListBoxItems.Add("MemorandumView");
            ListBoxItems.Add("FTPTestView");

②Cambie la página después de cambiar la selección del cuadro de lista:

public void ListBoxItems_SelectionChanged()
        {
           switch(SelectedItem)
            {
                case "ShellView":
                    ActiveWindowView = new ShellViewModel();break;
                case "EventAggregatorView":
                        ActiveWindowView = EventAggregatorViewModel.Instance; break;
                case "ConductorView":
                    ActiveWindowView = new ConductorViewModel(); break;
                case "MatchTemplateView":
                    ActiveWindowView = new MatchTemplateViewModel(); break;
                case "IndicatorLightView":
                    ActiveWindowView = new IndicatorLightViewModel(); break;
                case "MemorandumView":
                    ActiveWindowView = IoC.Get<MemorandumViewModel>(); break;
                case "FTPTestView":
                    ActiveWindowView = new FTPTestViewModel(new FTPConfig()); break;
                default:break;
            }
        }

③Encuadernación en primer plano:

<ListBox Name="ListBoxItems" Grid.Column="0" 
   SelectedItem="{Binding SelectedItem}" Margin="2"
   cal:Message.Attach="[Event SelectionChanged] = [Action ListBoxItems_SelectionChanged]"/>
<ContentControl Name="ActiveWindowView"/>

Utilice Conductor<T> en el marco de CM para realizar

 ① Código de fondo:

En primer lugar, debe heredar Conductor<IViewModel>.Collection.OneActive para poder usar los métodos y propiedades de esta clase y, en segundo lugar, el constructor debe agregar la interfaz de recepción.

IEnumerable<T>, el código modificado es el siguiente:

 public MainWindowViewModel(IEnumerable<IViewModel> modules)
        {
            Items.AddRange(modules);
            ActivateItem(Items.FirstOrDefault(vm => vm.GetType() ==typeof(IndicatorLightViewModel)));
        }

Si no considera que la página se activó por primera vez, el código central es solo una oración:

 Items.AddRange(modules);

②Código de primer plano:​​​​​​​​

 <ListBox Name="Items" Grid.Column="0"  Margin="2" DisplayMemberPath="DisplayName"/>
  <ContentControl Name="ActiveItem"/>

De esta manera, se configuran el anverso y el reverso, y se hereda la clase de gestión multipantalla de un marco, lo que simplifica enormemente los códigos del anverso y el reverso, y las funciones no se ven comprometidas. Para ser precisos, es más potente. Esta es la ventaja del marco CM.

Supongo que te gusta

Origin blog.csdn.net/qq_41872328/article/details/126741338
Recomendado
Clasificación