我是WPF的新手,我正在尝试做一些专门的数据绑定。具体来说,我有一个DataGrid绑定到一个对象集合,但我希望列的标题绑定到一个单独的对象。你是怎么做到的?
我有几个类定义如下:
public class CurrencyManager : INotifyPropertyChanged
{
private string primaryCurrencyName;
private List<OtherCurrency> otherCurrencies;
//I left out the Properties that expose the above 2 fields- they are the standard
//I also left out the implementation of INotifyPropertyChanged for brevity
}
public class OtherCurrency : INotifyPropertyChanged
{
private string name;
private double baseCurAmt;
private double thisCurAmt;
//I left out the Properties that expose the above 3 fields- they are the standard
//I also left out the implementation of INotifyPropertyChanged for brevity
}
然后XAML的重要部分如下。假设我已经将Page绑定到CurrencyManager类型的特定对象。请注意附加到第二个DataGridTextColumn的标头的绑定是如何不正确的,并且需要以某种方式访问CurrencyManager对象的属性PrimaryCurrencyName。也就是说,列的标题具有名称“PrimaryCurrencyName”,并且列中的数据仍然绑定到OtherCurrencies列表的每个元素的属性ThisCurAmt。
<DataGrid ItemsSource="{Binding Path=OtherCurrencies}" AutoGenerateColumns="False" RowHeaderWidth="0">
<DataGrid.Columns>
<DataGridTextColumn Header="Currency Name" Binding="{Binding Path=Name}"/>
<DataGridTextColumn Binding="{Binding Path=BaseCurAmt}">
<DataGridTextColumn.Header>
<Binding Path="PrimaryCurrencyName"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Header="Amt in this Currency" Binding="{Binding Path=ThisCurAmt}"/>
</DataGrid.Columns>
</DataGrid>
我该怎么做?谢谢!
答案 0 :(得分:0)
问题是,DataGridTextColumn不是可视树的一部分。
Normaly,这可以使用DataGridTemplateColumn
来解决,但在您的情况下,我认为这无济于事。
Jaime Rodriguez可能发表this篇文章 会引导你找到一个解决方案(我只是快速查看它,但它看起来很合适)。
答案 1 :(得分:0)
试试这个:
<DataGridTextColumn Binding="{Binding Path=BaseCurAmt}">
<DataGridTextColumn.Header>
<TextBlock>
<TextBlock.Text>
<Binding Path="DataContext.PrimaryCurrencyName"
RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}"/>
</TextBlock.Text>
</TextBlock>
</DataGridTextColumn.Header>
</DataGridTextColumn>
基本上,这个使用RelativeSource来查找DataGrid的DataContext(我假设它是一个CurrencyManager)并显示其PrimaryCurrencyName属性。希望这会有所帮助。