首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DataGrid条件RowHeader问题

WPF DataGrid条件RowHeader问题
EN

Stack Overflow用户
提问于 2011-07-16 13:50:52
回答 1查看 307关注 0票数 0

我想有条件地在WPF datagrid中显示不同的RowHeader内容。例如,我的模型有两个属性,Name和IsSuperHero。如果行代表一个超级英雄,我想在行标题中显示带有'SH‘的文本框。

我正在尝试使用数据触发器实现这一点,如下所示。问题是,文本框只显示在一行(最后匹配的行)上。下面,我预计“SH”将在对阵超人和蝙蝠侠时出现,但它只在对阵蝙蝠侠时出现。如果我按名称列排序,记录将被排序到“蝙蝠侠,约翰,彼得,超人”,现在“SH”标题显示在“超人”的旁边(这恰好是最后一个匹配的记录)。我是不是漏掉了什么?

代码语言:javascript
复制
public class UserModel
{
    public String Name { get; set; }
    public Boolean IsSuperHero { get; set; }
    public UserModel (String name, Boolean issuperhero) { Name = name; IsSuperHero = issuperhero; }
}

public partial class MainWindow : Window
{

    private void Window_Loaded (object sender, RoutedEventArgs e){
    List<UserModel> list = new List<UserModel>();
    list.Add(new UserModel("Peter", false));
    list.Add(new UserModel("Superman", true));
    list.Add(new UserModel("John", false));
    list.Add(new UserModel("Batman", true));

    myDataGrid.ItemsSource = list;

    //Show Header 'SH' for Super Hero
    TextBox txtBox = new TextBox();
    txtBox.Text = "SH";

    Style rowStyle = new Style();
    DataTrigger dataTrigger = new DataTrigger();

    dataTrigger.Binding = new Binding("IsSuperHero");
    dataTrigger.Value = true;


    Setter setter = new Setter(DataGridRow.HeaderProperty, txtBox);

    dataTrigger.Setters.Add(setter);

    rowStyle.Triggers.Add(dataTrigger);
    myDataGrid.RowStyle = rowStyle;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-16 21:22:15

TextBox只创建一次。您可以将TextBox作为资源添加到某些字典中,并将x:IsShared设置为false,然后使用StaticResourceMarkupExtension引用它,这样每次调用时都会创建一个新的call。

(由于x:Shared不能在代码中设置,这种方法应该适用于XAML,我看不出有任何理由要在代码中这样做)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6715634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档