如何在C#后台代码中为WPF ListView的数据绑定添加字符串?
解决WPF ListView绑定添加单位字符串的问题
你的问题出在错误地将格式化字符串直接传入Binding的构造函数——Binding的第一个参数是要绑定的属性名(比如"current_price"),而不是格式化后的内容。以下是几种可行的解决方法:
方法1:使用Binding的StringFormat属性(推荐)
这是最直接的方式,无需修改模型,直接在绑定上设置格式化规则:
gridView.Columns.Add(new GridViewColumn { Header = "Price", DisplayMemberBinding = new Binding("current_price") { // {0:N3} 表示保留3位小数,可根据需求调整为 {0:C} 货币格式或其他格式 StringFormat = "{0:N3} USD" } });
绑定后,current_price的值会自动格式化为类似17.260 USD的样式。
方法2:在模型中添加计算属性
如果需要复用格式化逻辑,可以在CryptocurrencyDataModel中新增一个只读的计算属性:
public class CryptocurrencyDataModel { // 原有属性保持不变 public int market_cap_rank { get; set; } public string name { get; set; } public string symbol { get; set; } public double price_change_percentage_24h { get; set; } public decimal current_price { get; set; } // 新增格式化后的价格属性 public string FormattedPrice => $"{current_price:N3} USD"; }
然后绑定这个新属性:
gridView.Columns.Add(new GridViewColumn { Header = "Price", DisplayMemberBinding = new Binding("FormattedPrice") });
方法3:自定义IValueConverter(适合复杂场景)
如果需要更灵活的格式化逻辑(比如根据条件切换单位),可以实现IValueConverter:
public class PriceConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is decimal price) { return $"{price:N3} USD"; } return string.Empty; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
在后台代码中创建转换器实例并绑定:
var priceConverter = new PriceConverter(); gridView.Columns.Add(new GridViewColumn { Header = "Price", DisplayMemberBinding = new Binding("current_price") { Converter = priceConverter } });
内容的提问来源于stack exchange,提问作者vajuakos
相关产品推荐
相关产品推荐

