Wpf 数据网格单元前缀

Wpf 数据网格单元前缀,wpf,xaml,Wpf,Xaml,在WPF中,如何使用美元符号($)作为可编辑datagrid列中所有单元格的前缀,并仍然绑定到decimal类型的CLR对象属性 MSDN文档倾向于将样式作为自定义datagrid中元素的视觉外观的方法(请参阅)。但是,我不想设置属性。我想在数据前面加一个美元符号 我试过使用。下面是我的XAML的摘录,显示了数据模板: ... <Window.Resources> <DataTemplate DataType="{x:Type Binding}" x:Key="myDa

在WPF中,如何使用美元符号(
$
)作为可编辑datagrid列中所有单元格的前缀,并仍然绑定到decimal类型的CLR对象属性

MSDN文档倾向于将样式作为自定义datagrid中元素的视觉外观的方法(请参阅)。但是,我不想设置属性。我想在数据前面加一个美元符号

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

...
<Window.Resources>
    <DataTemplate DataType="{x:Type Binding}" x:Key="myDataTemplate">
        <TextBlock>
            <Run>$</Run>
            <TextBox Text="{Binding}"></TextBox>
        </TextBlock>
    </DataTemplate>
</Window.Resources>
...
当然,后面有代码,但这里的框架应该描述我试图做的事情


简单地将属性更改为代码中的字符串类型,并使用美元符号作为前缀,这不是一个选项。

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

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

$

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

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


我希望这有帮助。

这里是另一个选项:

XAML:

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

您可以使用DataGridTemplateColumn而不是DataGridTextColumn吗?所以您不想使用
CellStyle
?这是为你设计的want@Guerudo很抱歉误导你,我只是不知道如何让CellStyle做到这一点。使用CellStyle的答案会很好。@AyyappanSubramanian是的,明白了。为了帮助别人,你想写一个快速的答案,还是我应该?…我读错了吗?为什么不在列的绑定基中使用currency StringFormat呢?谢谢,但是我试图避免仅仅为了给属性添加一些格式而操纵类。是的,该属性确实使用INotifyPropertyChanged,并且该类实现了ObservableCollection,因此从这个角度来看,C#适合于数据绑定。为什么不使用字符串格式,这本质上是
。很明显,你可以做更高级的事情,这样在某些情况下“$”就不可见了……是的,就是这样。非常感谢。美好的对于该列的排序,它会为其他提到的解决方案提供任何好处吗?@aarontomas对于此解决方案,排序工作是开箱即用的。但我认为,为其他解决方案进行排序应该不会太难。我想您只需要设置@aarontomas我喜欢这个解决方案,因为它使用了WPF的大部分内置功能(根据数据源动态生成列),只需稍加调整即可获得所需的结果。它还将适用于所有未来的列/属性,这些列/属性是typeof(decimal),因此它是自动可扩展的。它使用代码隐藏,但我认为并非所有代码隐藏都是坏的(只要它不执行视图模型的工作)。
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(decimal))
        ((DataGridBoundColumn)e.Column).Binding.StringFormat = "c";
}