![](/img/trans.png)
[英]WPF DataGridTextColumn FontWeight Binding / Value Converter not working
[英]Using binding with converter in Header property of DataGridTextColumn in WPF not working
我有以下 XAML:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<converters:KindConverter x:Key="KindConverter"/>
</Window.Resources>
<DataGrid ItemsSource="{Binding Items}" Visibility="{Binding IsTableVisible, Converter={StaticResource BooleanToVisibilityConverter}}"
CanUserAddRows="False" AutoGenerateColumns="False" IsReadOnly="True"
Margin="5,30,5,5" FontSize="16">
<DataGrid.Columns>
<DataGridTextColumn Header="Year" Binding="{Binding Year}" Width="*"/>
<DataGridTextColumn Header="{Binding Kind, Converter={StaticResource KindConverter}}" Binding="{Binding Count}" Width="*"/>
</DataGrid.Columns>
Items
是一个ObservableCollection<MyModel>
(但也适用于List<..>
向数据网格显示数据时)
public sealed class MyModel: INotifyPropertyChanged
{
private string _kind;
public MyModel(string year, string kind, int count)
{
Year = year;
Kind = kind;
Count = count;
}
public string Year { get; }
public string Kind { get { return _kind; } set { _kind = value; OnPropertyChanged(nameof(Kind)); } }
public int Count { get; }
...
}
和转换器:
public sealed class KindConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return $"Number of {value}"; // I put breakpoint but is not reached
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我添加如下数据:
Items.Add(new MyModel("2019", "Movies", 3);
...
但是列中的标题没有显示,它似乎是空的。 我希望看到Number of Movies
。
如果我已经理解您的问题,您希望在可观察集合中基于模型的 Kind 属性拥有一个动态标头。 唯一的问题是您正在绑定可能绑定到您的数据上下文的数据网格的标题; 所以您绑定到可能不存在的数据网格的数据上下文的 Kind 属性。 您想要实现的是“逻辑上”错误,因为您可以拥有多个具有不同 Kind 属性的对象,那么您应该在数据网格中拥有什么?
如果要按 Kind 属性对模型进行分组,则必须使用 GroupDescriptions 创建 CollectionViewSource 并将其绑定到 DataGrid 的 ItemsSource。
看看这个,看看它是如何工作的。
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.