У меня есть несколько вложенных элементов управления, которые, похоже, не наследуют привязки правильно ... или это может быть что-то совсем другое. Я немного новичок в WPF.DataGrid в ListBox ItemTemplate не наследует привязки?
У меня есть ObservableCollection объектов, связанных с ListBox, и на верхнем уровне это, кажется, работает, поскольку строка добавляется для каждого элемента в коллекции, как ожидалось. Проблема заключается в том, что мне нужно поместить DataGrid в ItemTemplate в ListBox и ...
Все я получаю те заголовки, которые я заданные вручную. Нет данных из связанных объектов.
Я, наверное, только что сделал что-то немое. Вот код, немного упрощена:
XAML:
<ListBox x:Name="ReportListBox" Margin="10,10,10,10" Grid.Row="1" ItemsSource="{Binding Path=SummaryTotals, Mode=OneWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Date, StringFormat=\{0:MM/dd/yyyy\}}" Header="Date"/>
<DataGridTextColumn Binding="{Binding GrossRevenue}" Header="Gross Revenue" />
<DataGridTextColumn Binding="{Binding OurRevenue}" Header="Our Revenue" />
<DataGridTextColumn Binding="{Binding Cost}" Header="Cost" />
<DataGridTextColumn Binding="{Binding Profit}" Header="Profit" />
<DataGridTextColumn Binding="{Binding Roi}" Header="ROI" />
<DataGridTextColumn Binding="{Binding Rpc}" Header="RPC" />
<DataGridTextColumn Binding="{Binding Clicks}" Header="Clicks" />
<DataGridTextColumn Binding="{Binding Conversions}" Header="Conversions" />
<DataGridTextColumn Binding="{Binding ConversionRate}" Header="Conversion Rate" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
C#:
public class SummaryTotalRecord
{
public DateTime Date { get; set; }
public decimal Cost { get { return Google.Cost + Ypa.PureLocal.Cost + Ypa.BuyerPricer.Cost; } }
public decimal GrossRevenue { get { return Google.GrossRevenue + Ypa.PureLocal.GrossRevenue + Ypa.BuyerPricer.GrossRevenue; } }
public decimal OurRevenue { get { return Google.OurRevenue + Ypa.PureLocal.OurRevenue + Ypa.BuyerPricer.OurRevenue; } }
public decimal Roi { get { return (Google.Roi + Ypa.PureLocal.Roi + Ypa.BuyerPricer.Roi)/3; } }
public decimal ConversionRate { get { return (Google.ConversionRate + Ypa.PureLocal.ConversionRate + Ypa.BuyerPricer.ConversionRate)/3; } }
public decimal Profit { get { return Google.Profit + Ypa.PureLocal.Profit + Ypa.BuyerPricer.Profit; } }
public decimal Rpc { get { return (Google.Rpc + Ypa.PureLocal.Rpc + Ypa.BuyerPricer.Rpc)/3; } }
public long Clicks { get { return Google.Clicks + Ypa.PureLocal.Clicks + Ypa.BuyerPricer.Clicks; } }
public long Conversions { get { return Google.Conversions + Ypa.PureLocal.Conversions + Ypa.BuyerPricer.Conversions; } }
// ... plus a bunch of other properties I haven't touched yet
}
public ObservableCollection<SummaryTotalRecord> SummaryTotals = new ObservableCollection<SummaryTotalRecord>();
Я нашел других с подобными проблемами и принятым исправлением, кажется, что-то вроде
RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}
Но ни то, ни x:Type ListItem
, похоже, не имеют каких-либо различий в результатах.
Обновление: Пробуждение нового метода с похожими результатами. Я изменил свой класс, чтобы вернуть объект DataTable с именем TableData
и модифицировал XAML следующим образом:
<Expander IsExpanded="True" Header="{Binding Date, StringFormat=\{0:MM/dd/yyyy\}}">
<DataGrid DataContext="{Binding Path=TableData}" AutoGenerateColumns="True" />
</Expander>
Похожие результаты:
расширителя имеет доступ к Date
собственности, но DataGrid он содержит не имеет доступа к TableData
?
Как насчет 'x: Тип ListBoxItem'? –
Хороший звонок, но не кости. Я попытался добавить это к свойствам привязки datagrid - и когда это не сработало, отдельные столбцы - все еще видны только заголовки. –
Можете ли вы вставить одну из ошибок привязки, которые вы получаете в окне вывода? –