WPF,datagrid单元格前缀

时间:2015-05-05 15:27:02

标签: wpf xaml

在WPF中,如何使用美元符号($)为可编辑数据网格列中的所有单元格添加前缀,并仍然绑定到十进制类型的CLR对象属性?

MSDN文档倾向于将样式指向自定义数据网格中元素的可视外观(参见here)。但是,我不想设置属性。我想在数据前加上一个美元符号。

我尝试过使用data templates。以下是我的XAML的摘录,显示了数据模板:

...
<Window.Resources>
    <DataTemplate DataType="{x:Type Binding}" x:Key="myDataTemplate">
        <TextBlock>
            <Run>$</Run>
            <TextBox Text="{Binding}"></TextBox>
        </TextBlock>
    </DataTemplate>
</Window.Resources>
...

但是,我可以找到将其包含在数据网格中的唯一位置是HeaderTemplate的{​​{1}}属性,就像在同一个XAML中的下一个摘录一样。这会在标题中显示DataGridTextColumn后跟一个文本框。我希望这不会发生在标题中,而是发生在该行的所有其他单元格中。

$

当然有代码隐藏,但这里的骨架轮廓应该描述我正在尝试做的事情。

只需将属性更改为代码中的字符串类型,并使用美元符号作为前缀,就不是一种选择。

3 个答案:

答案 0 :(得分:1)

您可以使用DataGridTemplateColumn。请参阅下面的代码。

<DataGridTemplateColumn Header="Header1" >
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock>
                                <Run>$</Run>
                                <TextBox Text="{Binding decimalProperty}"/>
                            </TextBlock>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>                        
                </DataGridTemplateColumn>

答案 1 :(得分:1)

我刚看到你的编辑,只是在文本绑定上使用格式._

<TextBlock Text="{Binding YourText, StringFormat={}{0:C}}"/>

我希望这会有所帮助。

答案 2 :(得分:0)

这是另一种选择:

<强> XAML:

<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn"/>

<强>代码:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(decimal))
        ((DataGridBoundColumn)e.Column).Binding.StringFormat = "c";
}