2013-08-24 3 views
1

У меня есть конвертер, чтобы изменить свою коллекцию в список значений и их type.My преобразователь принимает тип класса и возвращает IEnumerableПочему конвертер не вызывался

<ListView ItemsSource="{Binding Model,Converter={StaticResource PropConverter}}"/> 

мой частичный код класса

public partial class MainWindow : Window 
{ 
    public Model Model 
    { 
     get; 
     set; 
    } 


    public MainWindow() 
    { 
     Model=new Model(); 

     InitializeComponent(); 
    } 
} 

где, как если бы я изменить свой код и XAML, как это он называет convereter

public MainWindow() 
    { 
     DataContext=new Model(); 

     InitializeComponent(); 
    } 

<ListView ItemsSource="{Binding Converter={StaticResource PropConverter}}"/> 

Can вы, пожалуйста, расскажите мне причину, почему это происходит. Я предпочитаю делать первый способ, но почему-то он не вызывает конвертер.

ответ

1

В первом примере:

Это не работает, потому что вы не назначите DataContext так он равен нулю.

Вы можете исправить это присвоить значение DataContext:

public partial class MainWindow : Window 
{ 
    public Model Model 
    { 
     get; 
     set; 
    } 

    public MainWindow() 
    { 
     Model=new Model(); 

     InitializeComponent(); 

     this.DataContext = this; 
    } 
} 

А теперь ниже привязки будет работать:

<ListView ItemsSource="{Binding Model,Converter={StaticResource PropConverter}}"/> 

Лучшим вариантом является обучение MVVM pattern и назначить DataContext ViewModel:

public class MainViewModel 
{ 
    public MainViewModel() 
    { 
     Model = new Model(); 
    } 
    public Model Model 
    { 
     get; 
     set; 
    } 
} 

Вид:

public partial class MainWindow : Window 
{ 
    MainViewModel _vm; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     _vm = new MainViewModel(); 
     this.DataContext = _vm; 
    } 
}