将DataGrid的FontWeight属性绑定到值转换器。

4
我试图在DataGrid中使单元格加粗或正常,如果项目是新的/旧的,但遇到了错误...
看起来我的问题在这里描述:为什么我不能在Silverlight 4中绑定DataGridTemplateColumn的可见性? 我得到以下错误:
“类型为'System.Windows.Data.Binding'的对象无法转换为类型'System.Windows.FontWeight'。”
我的XAML如下:
<sdk:DataGridTextColumn Header="Subject" Binding="{Binding Subject}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" FontWeight="{Binding IsNew, Converter={StaticResource BoolToFontWeightConverter}}" />

我想问一下,有没有解决办法可以让它正常工作?我甚至没有使用模板列,只是普通的文本列。

public class BoolToFontWeightConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((bool)value) ? FontWeights.Bold : FontWeights.Normal;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (FontWeight)value == FontWeights.Bold;
        }
    }

你的转换器的返回类型是否等于 FontWeight 类型? - Reza ArabQaeni
转换器代码从未被调用 - 我添加了代码 - katit
很遗憾,FontWeight不是一个依赖属性。 - Rick Sladkey
有什么解决方法可以让它工作吗?也许创建自己的网格列? - katit
1个回答

5

DataGridTextColumn的FontWeight属性不是依赖属性,因此不支持绑定。解决方法是使用DataGridTemplateColumn并在DataTemplate中使用TextBox并设置适当的绑定,示例如下:

<sdk:DataGridTemplateColumn Header="Subject" 
                    CanUserReorder="True"
                    CanUserResize="True"
                    CanUserSort="True"
                    Width="Auto">
    <sdk:DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
        <TextBlock Text="{Binding Subject}" FontWeight="{Binding IsNew, Converter={StaticResource BoolToFontWeightConverter}}"/>
      </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>

通过 DataGridTextColumn.CellStyle 实现相同的效果是否可行?使用模板并不总是理想的选择。 - Vincent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接