2012-07-12 85 views
0

有datgrid与动态列数,这样的:WPF复选框排

<DataGrid DataGridCell.Selected="DataGrid_GotFocus" EnableColumnVirtualization="true" EnableRowVirtualization="true" Name="dataGrid1" DockPanel.Dock="Top" AutoGenerateColumns="False" 
        Height="120" Width="Auto" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserAddRows="false" CanUserResizeRows="False" CanUserSortColumns="False" CellEditEnding="dataGrid1_CellEditEnding"> 
       </DataGrid> 

for (var i = datetime; i < datetime.AddDays(1); i += TimeSpan.FromHours(1)) 
     { 
      var column = new DataGridTemplateColumn(); 
      column.Header = (i.Hour + 1).ToString(); 
      column.Width = 30; 
      column.CellTemplate = (DataTemplate)XamlReader.Load(
       new MemoryStream(Encoding.Default.GetBytes(
        @"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><TextBlock Text='{Binding ValuesExtended[" + i.Hour + @"].value_nullable, UpdateSourceTrigger=PropertyChanged}'/></DataTemplate>" 
       ))); 
      column.CellEditingTemplate = (DataTemplate)XamlReader.Load(
       new MemoryStream(Encoding.Default.GetBytes(
        @"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><TextBox Text='{Binding ValuesExtended[" + i.Hour + @"].value_nullable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}'/></DataTemplate>" 
       ))); 
      dataGrid1.Columns.Add(column); 
     } 

dataGrid1.ItemSource = data; 

现在我想一个特殊一行复选框而不是文本,我该怎么办呢? 谷歌搜索的例子,只发现复选框列。

+0

在每行中只有复选框?有没有约束力?你能否解释一下你想在这一行中取得什么成就。 – blindmeis 2012-07-12 06:12:20

+0

是的。与绑定,只有复选框。想要将double值0-1转换为true或false,并将其作为复选框传递给datagrid。 – 2012-07-12 08:57:41

回答

0

喜逻辑做到这一点是

<Window.Resources> 
    <DataGridRow x:Key="dr"> 
     <DataGridRow.Template> 
      <ControlTemplate> 
       <StackPanel Width="400" Orientation="Horizontal"> 
       <CheckBox Width="100"/> 
       <CheckBox Width="100"/> 
       <CheckBox Width="100"/> 
       <CheckBox Width="100"/> 
       </StackPanel> 
      </ControlTemplate> 
     </DataGridRow.Template> 
    </DataGridRow> 
</Window.Resources> 
<Grid > 
    <DataGrid AutoGenerateColumns="False" Width="400" CanUserAddRows="True" ItemsSource="{Binding PhoneNumbers}" LoadingRow="DataGrid_LoadingRow"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

</Grid> 

private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e) 
    { 
     if (e.Row.Item.ToString().Equals("{NewItemPlaceholder}")) 
     { 
      e.Row.Item = this.FindResource("dr"); 
      e.Row.DetailsVisibility = Visibility.Visible; 
     } 

    } 

这是不准确但这个想法是怎么样的相同。我希望这将有助于