0

ListView コントロールで GridView を使用して、カタログ コンテンツを表示しています。コード ビハインドを使用して ListView コンテンツを動的にロードし、GridViewColumns を作成して、カスタム catListItem クラスのプロパティにバインドしています。

        var view = new GridView();

        var binding = new Binding("Name");
        var resElement = _mResourceManager.GetElementByMdlID("vlu_usw_name_of");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

        binding = new Binding("Number");
        resElement = _mResourceManager.GetElementByMdlID("vlu_usw_arc_logical_nmbr");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

すべて問題ありませんが、GridViewColumn の CellTemplate プロパティを使用して、アイコンを含む列を追加しようとしています。このようなもの:

var view = new GridView();

        var col = new GridViewColumn { Header = "" };
        var template = new System.Windows.DataTemplate(typeof(Image));

        col.CellTemplate = template;
        view.Columns.Add(col);

        var binding = new Binding("Name");
        var resElement = _mResourceManager.GetElementByMdlID("vlu_usw_name_of");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

        binding = new Binding("Number");
        resElement = _mResourceManager.GetElementByMdlID("vlu_usw_arc_logical_nmbr");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

DisplayMemberBinding、CellTemplate、および CellTemplateSelector を使用する場合に優先順位があることはわかっています。だから私の質問は次のとおりです:CellTemplateのコンテンツを作成(設定、...)し、おそらくそれをカスタムクラスのプロパティに動的にバインドするにはどうすればよいですか? 何が恋しいのかわからない!その問題を検索しましたが、見つかったのは DataTemplate を使用した XAML ソリューションだけです。コードビハインドでそれを行うことが重要です。前もって感謝します!

4

1 に答える 1

0

実際、私はここで解決策を見つけまし

FrameworkElementFactory を使用する必要がありました。これが私が探していたコードです:

        var column = new GridViewColumn { Header = "" };
        var customTemplate = new System.Windows.DataTemplate();
        var efImage = new FrameworkElementFactory(typeof(Image));
        efImage.SetBinding(Image.SourceProperty, new Binding("Icon"));
        customTemplate.VisualTree = efImage;
        column.CellTemplate = customTemplate;
        view.Columns.Add(column);
于 2015-06-03T13:46:01.870 に答える