2009-08-04 9 views
12

WPF'de bir nesneye bağlandığım bir veri kılavuzum var.WPF Toolkit Datagrid - seçimi nasıl kapatıyorsunuz?

Orada bir DataGridCheckBoxColumn var, kullanıcıların gitmek ve istediklerini işaretlemek isteyebilirsiniz. Sorun iki kere tıklamak zorunda, seçim için bir kez daha kontrol etmek/işaretini kaldırmak için tekrar. Bunu nasıl kapatırsın, cevabı bulmak için çok uzun süredir aradım. Datagrid'in SelectionMode ve SelectionUnit özellikleri vardır - bunların hiçbiri 'none' veya 'go away' kabul etmez.

Herhangi bir yardım için teşekkür ederiz! Kodum referans

ilk tıklama düzenleme modunda hücre sonra ikinci tıklamayla onay kutusunu değiştirmek için izin verir koyar
<my:DataGrid Margin="15" Name="dgPreview" 
     AutoGenerateColumns="False" CanUserSortColumns="True" 
      CanUserDeleteRows="True" 
      Background="White" 
      ColumnHeaderHeight="20" 
      VerticalScrollBarVisibility="Visible" 
      RowDetailsVisibilityMode="Visible" 
      > 

    <my:DataGrid.Columns> 
     <my:DataGridCheckBoxColumn MinWidth="50" Width="Auto" Header="Include" Binding="{Binding Include}" /> 
     <my:DataGridTextColumn MinWidth="50" Width="Auto" Header="Override #" Binding="{Binding OverrideNumber}" /> 
     <my:DataGridTextColumn MinWidth="220" Width="*" Header="Name" Binding="{Binding Name}" /> 
     <my:DataGridTextColumn MinWidth="50" Width="Auto" IsReadOnly="True" Header="Preview" Binding="{Binding Preview}" /> 
    </my:DataGrid.Columns> 
</my:DataGrid> 
+0

Bu konuyla ilgili daha fazla soru, birçok iyi yanıtla birlikte: http://stackoverflow.com/questions/3833536/how-to-perform-single-click-checkbox-selection-in-wpf-datagrid/8333704#8333704 – surfen

cevap

19

için altındadır. Bu davranışı DataGridCheckBoxColumn yerine bir DataGridTemplateColumn kullanarak değiştirebilirsiniz. Bu konudaki DataGridCheckBoxColumn değiştirin:

<my:DataGridTemplateColumn MinWidth="50" Width="Auto" Header="Include" SortMemberPath="Include"> 
    <my:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
     <CheckBox Style="{StaticResource DataGridCheckBoxStyle}" IsChecked="{Binding Path=Include}" /> 
     </DataTemplate> 
    </my:DataGridTemplateColumn.CellTemplate> 
</my:DataGridTemplateColumn> 

DataGridCheckBoxStyle sadece CheckBox DataGrid'te biraz daha güzel görünmesini sağlar: ait

<Style x:Key="DataGridCheckBoxStyle" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}"> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Margin" Value="8,0,3,0" /> 
</Style> 
+0

Mükemmel, teşekkürler yığınları John! – RodH257

+2

WPF 4.0'da benim için çalışmıyor. Stil için teşekkürler. :) – bugfixr

+0

WPF 4.0'da benim için çalışıyor. Bununla birlikte, "BasedOn" -Tag'ın tasarımında derleme sırasında ve tasarımda bir uyarı alıyorum: "Kaynak" {x: Type CheckBox} "bulunamadı, sadece kaldırdım ve çalışıyor. – OneWorld

1

First, ben bu oldukça eski bir soru olduğunu biliyorum ama yine de ben düşündüm d dene ve cevapla.

Birkaç gün önce aynı problemi yaşadım ve bunun için şaşırtıcı derecede kısa bir çözüme rastladım (bkz. this blog). Temel olarak, tüm yapmanız gereken aşağıdaki ile XAML DataGridCheckBoxColumn tanımını değiştirmek olduğunu:

<DataGridTemplateColumn Header="MyCheckBoxColumnHeader"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding Path=MyViewModelProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

bu çözümün baş açıktır - bu XAML okunur var; Böylece, kodunuzu geri yükleyerek ek UI mantığı ile engellenir ve durumunuzu MVVM zealots gözünde bulundurmanıza yardımcı olur;).

+0

Yukarıdaki ile aynı yanıttır. – BenjaminPaul

+0

Bu cevap için teşekkürler. Yukarıdaki, benim için bir onay kutusunu tıklatmanın aslında alttaki nesneleri değiştirmemesi anlamında işe yaramadı. Mode = TwoWay eklediğiniz gerçeğin bu sorunu çözdüğüne inanıyorum. – muaddib