2013-02-01 20 views

cevap

6

Bu işlevselliği elde etmek birkaç tetikleyiciler ile birlikte DataGridTemplateColumn kullanabilirsiniz:

bu Bkz.

Bu, DataGrid'i (String) Kontrol Türleri listesine bağlayan bir demo uygulamasıdır. İlk sütun sadece kontrol tipi dizgiyi gösterir ve ikinci sütun karşılık gelen Kontrolü sunmak için aynı bilgi üzerinde çalışır. Sen xaml biraz daha özlü yapmak mümkün olabilir, ancak bu onun jist geçerli:

XAML:

<Window x:Class="DataGridWithMultipleTypesPerColumn.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <DataGrid ItemsSource="{Binding ControlTypes}" 
       AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
     <DataGridTextColumn Header="Control Type" Binding="{Binding}"/> 
      <DataGridTemplateColumn Header="Actual Control"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ContentControl> 
          <ContentControl.Style> 
           <Style TargetType="ContentControl"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding}" Value="TextBox"> 
              <Setter Property="ContentTemplate"> 
               <Setter.Value> 
                <DataTemplate> 
                 <TextBox Text="Default Text"/> 
                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             </DataTrigger> 
             <DataTrigger Binding="{Binding}" Value="CheckBox"> 
              <Setter Property="ContentTemplate"> 
               <Setter.Value> 
                <DataTemplate> 
                 <CheckBox Content="Check Box"/> 
                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             </DataTrigger> 
             <DataTrigger Binding="{Binding}" Value="Button"> 
              <Setter Property="ContentTemplate"> 
               <Setter.Value> 
                <DataTemplate> 
                 <Button Content="Button"/> 
                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </ContentControl.Style> 
         </ContentControl> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 
kod arkadaki

ve Görünüm Modeli:

namespace DataGridWithMultipleTypesPerColumn 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      this.DataContext = new ViewModel(); 
     } 
    } 

    public class ViewModel 
    { 
     public ObservableCollection<string> ControlTypes 
     { 
      get; 
      private set; 
     } 
     public ViewModel() 
     { 
      ControlTypes = new ObservableCollection<string>() { "Button", "TextBox", "CheckBox" }; 
     } 
    } 
} 
+1

Teşekkür ederim, şimdi yapabilirim. Anlaması oldukça kolay bir talimat buldum: http://code.msdn.microsoft.com/mag201104DataPoints. Henüz eğitimini denemiyorum ama mantıklı geliyor. – kidgu

+0

Bu, dinamik olarak seçtiğimiz kontrole bağlanan verilerle nasıl çalışır? – bgura

+1

Bu durumda nasıl ciltleme çalışması yapabiliriz? Örneğin, buna sahipsiniz: , ancak Text özelliğini bir şeye nasıl bağlarız? Sorun, bu TextBox'ın DataContext içermemesi ve ebeveynin veri içeriğini görmemesidir. – nightcoder

İlgili konular