2012-07-13 3 views
0

У меня есть запрос, который возвращает 2 колонки от присоединения к 2 сущности, как следующее:Datagrid установки заголовка столбца

var myQ = myDataContext1.Entity1.Join(myDataContext1.Entity2, a=>a.id, b=>b.id, (a, b)=> new Tuple<int, float>(a.id, b.something)).ToList(); 
MyDatagrid.ItemSources = myQ; 

Он работал отлично. Но мой datagrid называет 2 столбца как «item1» и «item2». Я попытался изменить их на правильные имена. До сих пор я не мог этого сделать. Я попытался использовать:

MyDatagrid.Columns.Add(new DataGridTextColumns{ Header = "Aheader", Binding= new System.Windows.Data.Binding("a.id"); 

Все данные исчезнут, потому что имя привязки должно быть неправильным. Но я понятия не имею, что я должен поставить следующие Binding ... Затем я попытался

MyDataGrid.Columns[0].Header = "myID"

Это не работает, и говорит мне, что каждый раз, когда не было никаких столбцов в коллекции столбцов. Так что я думаю, что изменение заголовка должно произойти после того, как будет загружен DataGrid и добавил событие:

MyDataGrid.loaded += (o, e) =>{MyDataGrid.Columns[0].Header = "myID"}; 

все та же ошибка ..... Любая идея, что я должен здесь делать? Благодарю.

ответ

1

Связывание должно быть Item1 и Item2. Вы также должны установить значение AutoGenerateColumns в значение false, и желательно определить столбцы в XAML. например

<DataGrid AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=Item1}" Header="Header 1"></DataGridTextColumn> 
     <DataGridTextColumn Binding="{Binding Path=Item2}" Header="Header 2"></DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

Возможно, вам будет лучше использовать анонимный тип вместо кортежа. Таким образом, привязка может быть более значимой. Код

+0

Спасибо. Я преобразовал его в C# в качестве следующего, и он работал: myDataGrid.Columns.Add (новый DataGridTextColumn {Header = "myHeader" Binding = новый System.Windows.Data.Binding ("Item1")}); – NewDTinStackoverflow

0

преобразованного MikeKulls' в C#:

myDataGrid.Columns.Add(new DataGridTextColumn {Header ="myHeader" Binding = new System.Windows.Data.Binding("Item1")});