WPF: impostazione di ListView View tramite DataTrigger

Ho una vista elenco e 2 risorse per visualizzare la vista della lista: BooksGridView e ImageDetailView.

ViewModel ha una proprietà stringa chiamata ViewMode, che contiene il nome della vista che attualmente voglio visualizzare. (È cambiato da un altro controllo, usando le barre degli strumenti)

Sto cercando di cambiare la vista selezionata usando DataTrigger , ma non riesco a far cambiare la proprietà View.

Quando imposto direttamente la risorsa View, viene visualizzata la vista corretta. Ho anche aggiunto le modifiche in background per assicurarmi che il trigger dei dati sia triggersto e lo sfondo sia cambiato.

Quindi ovviamente mi manca qualcosa qui …

      ...   ...                             

Grazie

Basandosi sull’esempio su MSDN, il seguente funziona modificando la vista in base a una modifica in ViewModel. L’unica differenza che posso vedere con il tuo codice è l’uso di DynamicResource :

                                                            CurrentView:    Right-click in the content window to change the view.    

Codice dietro file:

 using System; using System.Windows; using System.Windows.Controls; namespace SDKSample { ///  /// Interaction logic for Window1.xaml ///  public partial class Window1 : Window { public Window1() { InitializeComponent(); } public MainViewModel ViewModel { get { return this.DataContext as MainViewModel; } } void SwitchViewMenu(object sender, RoutedEventArgs args) { MenuItem mi = (MenuItem)sender; ViewModel.ViewName = mi.Header.ToString(); } private void Window_SourceInitialized(object sender, EventArgs e) { ViewModel.ViewName = "gridView"; } } } 

E infine la class ViewModel:

 using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace SDKSample { public class MainViewModel : INotifyPropertyChanged { public string ViewName { get { return viewName; } set { if (viewName == value) return; viewName = value; NotifyPropertyChanged("ViewName"); } } private string viewName; public event PropertyChangedEventHandler PropertyChanged; void NotifyPropertyChanged(string name) { if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(name)); } } } 

Non riesco a vedere alcun problema evidente con il codice che hai fornito. Di solito suggerisco di controllare che DataTrigger sia triggersto, tuttavia lo hai già testato con la proprietà Background .

Esaminando l’esempio su MSDN ( collegamento ) l’unica differenza nell’implementazione è che, nell’esempio, il ListView.View viene modificato nel codice.

 BookListView.View = this.FindResource("BooksGridView") as ViewBase; 

Hmm, forse la risorsa vista potrebbe non essere in grado di trovare e sta fallendo.

Tutto quello che posso suggerire è guardare il campione. Spiacente non potrebbe essere molto più d’aiuto.