-
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.