1

コレクションを値のリストとその型に変更するコンバーターがあります。コンバーターはクラス型を受け入れ、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}}"/>

これが起こっている理由を教えてください.私は最初の方法を好むのですが、どういうわけかコンバータを呼び出しません.

4

1 に答える 1

1

最初の例では:

DataContext を割り当てていないため、null に等しいため、機能していません。

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 パターンを学習して 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;
    }
} 
于 2013-08-24T10:25:22.397 に答える