DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 144, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

lunedì 29 marzo 2010

[WPF] Ereditare controlli da classi generiche

In applicazioni WPF di una certa complessità è molto facile trovarsi in situazioni in cui è utile sfruttare classi base per i controlli (es. UserControl e Window). In architetture MVVM, ad esempio, è possibile far ereditare i vari controlli da classi base generiche. Tuttavia, l’ implementazione dell’ereditarietà generica in WPF talvolta non è proprio immediata, soprattutto perché non sempre gli errori di build sono esplicativi. 
In questo semplicissimo esempio di MVVM viene mostrato come si può specificare la classe base generica di una Window direttamente nello XAML.

Partiamo dalla Window:

public partial class CustomersWindow : WindowBase<CustomersViewModel>
{       
 
public CustomersWindow() : base(new CustomersViewModel())
 
{           
   
InitializeComponent();                        
 
}
  ...
}

La classe base generica della Window potrebbe essere qualcosa del genere...

public class WindowBase<T> : Window where T : ViewModelBase
{
 
public T ViewModel { get; set; } 

  public WindowBase() { }

 
public WindowBase(T viewModel)
 
{
   
this.ViewModel = viewModel;
   
base.DataContext = viewModel;
 
}
}

Arriviamo quindi al punto. Lo XAML che permette di specificare l’ereditarietà da classi generiche diventa:

<src:WindowBase
    
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    
xmlns:src="clr-namespace:MyApplication"
    
x:Class="MyApplication.CustomersWindow"
    
x:TypeArguments="src:CustomersViewModel" ...>   
 
...
</src:WindowBase>

Tramite x:TypeArguments possiamo specificare il tipo generico della classe base. 

ATTENZIONE: questa tecnica è applicabile solo per il nodo root del documento XAML.

Technorati Tag: ,,,

 

posted @ lunedì 29 marzo 2010 13.48 | Feedback (3) | Filed Under [ WPF ]

Powered by: