WPF:如何将数字属性绑定到DataGridTextColumn?

时间:2010-09-11 04:49:52

标签: wpf datagrid binding string-formatting datagridtextcolumn

我认为对WPF来说这应该是一件简单的事情,但我无法让它发挥作用...... 我的类上有一个int属性(Divisions),我想将它绑定到DataGrid列。

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
            <DataGridTextColumn Header="Number of Divisions" Binding="{Binding Path=Divisions, StringFormat={}\{0:N0\}}" IsReadOnly="True"/>                
    </DataGrid.Columns>
</DataGrid>

但是,它没有显示出来。 我也尝试过这段代码,它也不适用于我:

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Divisions" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Divisions, StringFormat=C}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

为了测试purpse,如果我向此类添加一个字符串属性以返回Divisions的字符串值,它就可以正常工作。那么,这里有什么不对?

2 个答案:

答案 0 :(得分:4)

有趣......我能够使用以下(在VS 2010,.NET 4中)示例轻松地完成工作。

我的网格定义:

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Number of Divisions" 
                            Binding="{Binding Path=Divisions,  StringFormat={}\{0:N0\}}" 
                            IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

设置数据背景:

this.DataContext = new List<MyItem>() { 
    new MyItem() { Divisions = 1 },
    new MyItem() { Divisions = 2 },
    new MyItem() { Divisions = 3 },
    new MyItem() { Divisions = 4 },
    new MyItem() { Divisions = 5 }
};

我的数据类定义:

public class MyItem {
    public int Divisions { get; set; } 
}

希望这有帮助!

答案 1 :(得分:0)

我不相信你正确地指定了你的StringFormats。

在第一个示例中,尝试删除转义字符,如下所示: StringFormat={}{0:N0}

在第二个: StringFormat={}{0:C}