我想有条件地在WPF datagrid中显示不同的RowHeader内容。例如,我的模型有两个属性,Name和IsSuperHero。如果行代表一个超级英雄,我想在行标题中显示带有'SH‘的文本框。
我正在尝试使用数据触发器实现这一点,如下所示。问题是,文本框只显示在一行(最后匹配的行)上。下面,我预计“SH”将在对阵超人和蝙蝠侠时出现,但它只在对阵蝙蝠侠时出现。如果我按名称列排序,记录将被排序到“蝙蝠侠,约翰,彼得,超人”,现在“SH”标题显示在“超人”的旁边(这恰好是最后一个匹配的记录)。我是不是漏掉了什么?
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;
}发布于 2011-07-16 21:22:15
TextBox只创建一次。您可以将TextBox作为资源添加到某些字典中,并将x:IsShared设置为false,然后使用StaticResourceMarkupExtension引用它,这样每次调用时都会创建一个新的call。
(由于x:Shared不能在代码中设置,这种方法应该适用于XAML,我看不出有任何理由要在代码中这样做)
https://stackoverflow.com/questions/6715634
复制相似问题