【问题标题】:WPF: How to bind a numeric property to DataGridTextColumn?WPF:如何将数字属性绑定到 DataGridTextColumn?
【发布时间】:2010-09-11 04:49:52
【问题描述】:

我认为这对 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>

为了测试目的,如果我在这个类中添加一个字符串属性来返回 Divisions 的字符串值,它就可以正常工作。那么,这里有什么问题呢?

【问题讨论】:

    标签: wpf datagrid binding string-formatting datagridtextcolumn


    【解决方案1】:

    有趣...我能够使用以下(在 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; } 
    }
    

    希望这会有所帮助!

    【讨论】:

    • 非常感谢您的快速回复。我终于弄明白了。问题不在 StringFormat 中,而是因为“Divisions”被定义为公共成员变量,而不是公共属性。这是这个班级的众多成员之一,我忽略了它。实际上,一旦将其更改为属性,它就可以在没有 StringFormat(用于 int)的情况下正常工作。很抱歉造成混乱。
    • 没问题,很高兴为您提供帮助!此外,如果此答案帮助您解决了问题,请务必点击复选框将其标记为已接受的答案!
    【解决方案2】:

    我不相信您指定的 StringFormats 正确。

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

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

    【讨论】:

    • 我尝试了他的例子两种方式(带和不带转义大括号)和带有千位分隔符(即逗号)的数字无论哪种方式都正确显示。好主意。
    • 我也尝试了几种使用StringFormat的方法...以下三个返回相同的结果:{Binding...StringFormat=N1}, {Binding...StringFormat=\{0:N1\} } 和 {Binding...StringFormat={}\{0:N1\}}。有趣的是,在第二种情况下,如果我删除转义字符,编译器会抱怨。但是在第三种情况下,第一对花括号不应该被转义,但第二对必须。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多