在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
后跟一个文本框。我希望这不会发生在标题中,而是发生在该行的所有其他单元格中。
$
当然有代码隐藏,但这里的骨架轮廓应该描述我正在尝试做的事情。
只需将属性更改为代码中的字符串类型,并使用美元符号作为前缀,就不是一种选择。
答案 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";
}