2013-06-05 7 views
2

Вопрос для начинающих. У меня есть XAML в моей форме WPF.Недопустимы значения заголовка столбца Datagrid.

<DataGrid x:Name="GridTable" 
       ItemsSource="{Binding GridDataSource}" 
       HorizontalGridLinesBrush="#FFE2E2E2" 
       VerticalGridLinesBrush="#FFE2E2E2" 
       CanUserAddRows="False" 
       CanUserResizeColumns="True" 
       Margin="10,140,214,10" 
       SelectionChanged="GridTableSelectionChanged" > 

     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Header="{Binding Selection}" ></DataGridCheckBoxColumn> 
      <DataGridTextColumn Header="{Binding XmlFile}"></DataGridTextColumn> 
      <DataGridTextColumn Header="{Binding Result}"></DataGridTextColumn> 
     </DataGrid.Columns> 

     <DataGrid.Resources> 
      <Style TargetType="DataGridCell"> 
       <Setter Property="BorderThickness" Value="0"/> 
       <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
      </Style> 
     </DataGrid.Resources> 

    </DataGrid> 

ViewModel Код

public string Selection 
    { 
     get { return "Selection"; } 
    } 

    public string XmlFile 
    { 
     get { return "Xml File"; } 
    } 

    public string Result 
    { 
     get { return "Result"; } 
    } 

    private DataTable CreateDataSource() 
    { 
     var dt = new DataTable(); 

     var dc = new DataColumn(Selection, typeof(bool)); 
     dt.Columns.Add(dc); 

     dc = new DataColumn(XmlFile, typeof(string)); 
     dt.Columns.Add(dc); 

     dc = new DataColumn(Result, typeof(string)); 
     dt.Columns.Add(dc); 

     return dt; 
    } 

Я использую этот DataTable в качестве источника для моей сетки после заполнения данных в нем.

Я ожидаю, что когда я запустил приложение, я смогу увидеть datagrid с тремя столбцами с заголовками Selection, XmlFile и Result как значения привязки. Но я вижу только сетку без столбцов. Может ли кто-нибудь помочь мне понять, что в этом плохого?

Также я хочу подключить источник данных GridDataSource к сетке. В этом datatable есть 3 столбца с одинаковыми именами, как столбцы сетки и некоторые связанные данные. Когда я загружаю некоторые данные в datatable и уведомляю их о просмотре, я вижу уже присутствующие 3 пустых столбца, а затем еще 3 столбца моего datatable. Может ли кто-нибудь помочь мне понять, что не так с моим кодом. Дайте мне знать, если вам нужна дополнительная информация.

Редактировать

Также я заметил, когда мой AutoGenerateColumns тег установлен верно, то я вижу дополнительные 3 колонки моего DataTable в DataGrid вместе с 3-х пустых столбцов. И когда тегу AutoGenerateColumns` установлено значение false, я не вижу никаких данных и вижу только 3 пустых столбца.

+0

вы можете разместить основной VM, пожалуйста? Вы получаете ошибки 'BindingExpression' в вашем окне отладки? – DHN

+0

см. Редактирование .... на обед в течение часа :) – Sandy

+0

Наслаждайтесь своим обедом - что случилось с ошибками 'BindingExpression'? – DHN

ответ

0

В настоящее время вы связываете DataGridColumn.Header, что означает, что ваш GridDataSource должен выставить 3 свойства (Selection, XmlFile и Result), которые будут отображаться в заголовках столбцов, а не значения. Если я правильно понимаю вашу проблему и модель данных, я думаю, что то, что вы хотите связать это Binding, не Header:

<DataGrid.Columns> 
    <DataGridCheckBoxColumn Header="Selection" Binding="{Binding Selection}"/> 
    <DataGridTextColumn Header="XmlFile" Binding="{Binding XmlFile}"/> 
    <DataGridTextColumn Header="Result" Binding="{Binding Result}"/> 
</DataGrid.Columns> 

также DataGrid имеет AutoGenerateColumns вариант, который может быть в использовании здесь, что будет создавать столбцы автоматически вы на основе прикрепленного источника данных, поэтому вам не нужно указывать вручную DataGrid.Columns

<DataGrid AutoGenerateColumns="True" ..../> 
+0

Я думаю, нет .... Я пытаюсь связать текст заголовка с объектом в ViewModel. Опять же, я пытаюсь привязать источник данных к сетке к datatable. Поскольку я хочу использовать существующие столбцы datagrid, я подготовил datatble с одинаковыми именами столбцов, чтобы привязка прошла успешно. – Sandy

+0

Технически при связывании 'DataGridCheckBoxColumn' мне нужен DataRowView в ViewModel, но на данный момент у меня есть строка. И у меня есть все мои данные вместо данных. – Sandy

+0

Но тогда автогенерация столбцов сделает то, что вы ищете. Он свяжет данные и создаст для вас заголовок столбца. [Здесь] (http://db.tt/cwhpUhQo) - мой простой пример, который будет привязан к DataTable из моего представления модели и автоматического генерации столбцов. Поскольку ваш заголовок столбца установлен в точке создания из вашего свойства, вам не нужно связывать его снова. – dkozl

Смежные вопросы