Выход из иерархии привязки данных - PullRequest
0 голосов
/ 30 августа 2010

Я немного новичок в 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 выглядит следующим образом.Предположим, что я уже связал страницу с конкретным объектом типа CurrencyManager.Обратите внимание, что привязка, прикрепленная к заголовку 2nd DataGridTextColumn, является неправильной и должна каким-то образом получить доступ к свойству объекта CurrencyManager PrimaryCurrencyName.То есть заголовок столбца имеет имя «PrimaryCurrencyName», а данные в столбце по-прежнему привязаны к свойству ThisCurAmt для каждого элемента списка OtherCurrencies.

<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>

Как это сделать?Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 августа 2010

Попробуйте это:

<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 для поиска DataContext DataGrid (который я предполагаю, как CurrencyManager) и отображения его свойства PrimaryCurrencyName.Надеюсь, это поможет.

0 голосов
/ 31 августа 2010

Проблема в том, что DataGridTextColumn не является частью визуального дерева.

Обычно это можно обойти, используя DataGridTemplateColumn, но в вашем случае, я думаю, это не поможет.

Вероятно это статья от Хайме Родригеса приведет вас к решению (я только быстро посмотрел на него, но выглядит уместно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...