在 DataGridTextColumn 中绑定 ViewModel 属性
Posted
技术标签:
【中文标题】在 DataGridTextColumn 中绑定 ViewModel 属性【英文标题】:Binding ViewModel property in DataGridTextColumn 【发布时间】:2013-12-28 20:44:24 【问题描述】:对于一个应用程序,我需要创建一个DataGrid
和一个DataGridTextColumn
,其中MultiBinding
。
第一个 Binding
使用 ItemsSource 中给定的属性,第二个 Binding
应该使用我的 ViewModel 中的属性。
<DataGridTextColumn Header="Hourly wage" SortMemberPath="HourlyWage">
<DataGridTextColumn.Binding>
<MultiBinding StringFormat="01">
<Binding Path="HourlyWage" />
<Binding Path="CurrencyUnit" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
在这种情况下,HourlyWage
是当前项目的属性。 CurrencyUnit
是我的 ViewModel 中的一个属性。
如果我启动我的应用程序,此列是空的。那么如何让它同时显示呢?
我使用 Catel 作为我的 MVVM 框架和 MahApps.Metro 作为我的 GUI。我无法在我的 View 中创建 ViewModel,因为它是由 Catel 处理的。
问候, 斯蒂芬
【问题讨论】:
【参考方案1】:如果不能访问视图模型,可以定义第二个绑定如下:
<Binding RelativeSource="RelativeSource AncestorType=DataGrid"
Path="DataContext.CurrencyUnit" />
Binding 的源将设置为 DataGrid 实例。路径 DataContext.CurrencyUnit
将引用属性 YourViewModel.CurrencyUnit
,假设您的视图模型包含数据网格的项目集合和货币单位属性。
【讨论】:
【参考方案2】:您可以为视图模型实例的第二个绑定设置绑定源。 我使用了以下视图模型:
namespace WpfApplication1
public class ViewModel
public ViewModel()
this.items = new List<Item>
new Item("13.4"),
new Item("22.3");
public List<Item> Items
get return this.items;
public string CurrencyUnit
get return "$";
private List<Item> items;
而Item类如下:
namespace WpfApplication1
public class Item
public Item(string hWage)
HourlyWage = hWage;
public string HourlyWage get; set;
然后我使用了以下 XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:ViewModel x:Key="viewModel" />
</Window.Resources>
<Grid DataContext="StaticResource viewModel">
<DataGrid AutoGenerateColumns="False" ItemsSource="Binding Items">
<DataGrid.Columns>
<DataGridTextColumn Header="Hourly wage"
SortMemberPath="HourlyWage">
<DataGridTextColumn.Binding>
<MultiBinding StringFormat="01">
<Binding Path="HourlyWage" />
<Binding Source="StaticResource viewModel"
Path="CurrencyUnit" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
【讨论】:
不幸的是,我无法在我的 XAML 中添加 ViewModel,因为它会破坏 Catel 的功能。 (生成虚拟机两次)以上是关于在 DataGridTextColumn 中绑定 ViewModel 属性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WPF 中的代码绑定 DataGridTextColumn 的可见性属性?
Silverlight DataGridTextColumn 绑定可见性
WPF将DataGridTextColumn的背景颜色绑定为逐行着色