条件付きで別のRowHeaderの内容をWPFデータグリッドに表示したい。例えば。 My ModelにはNameとIsSuperHeroの2つのプロパティがあります。行がスーパーヒーローを表している場合は、行ヘッダーに 'SH'というテキストボックスを表示します。WPF DataGrid条件付きRowHeaderの問題
私は以下のようにdatatriggersを使用してこれを達成しようとしています。問題は、テキストボックスが1つの行(最後に一致する行)にのみ表示されることです。 以下、スーパーマンとバットマンに対して '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;
}
おかげH.B.を(
x:Shared
をコードで設定することができないように、このアプローチは、1が最初の場所でのコードでこれをしたいと思う理由私はいかなる理由が表示されない、XAMLに取られるべきです)そのトリックをした。あなたはなぜ、 'shared = true'リソースがdatagrid-columnでは動作するのか、datagrid-headerでは動作しないのか説明できますか? – knowit