2013-02-01 4 views

Odpowiedz

6

Można użyć DataGridTemplateColumn połączeniu z kilkoma wyzwalaczy do osiągnięcia tej funkcji.

To aplikacja demonstracyjna, która wiąże element DataGrid z listą (ciągów) typów sterowania. Pierwsza kolumna wyświetla właśnie ciąg znaków kontrolnych, a druga kolumna działa na tej samej informacji, aby przedstawić odpowiednią Kontrolę. Możesz być w stanie dokonać XAML nieco bardziej zwięzłe, ale to jist niego:

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> 

Code-tył i widok Model:

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

Dziękuję, mogę to teraz zrobić. Znalazłem instrukcję, która jest dość łatwa do zrozumienia: http://code.msdn.microsoft.com/mag201104DataPoints. Nie próbuję jeszcze twoich instrukcji, ale wydaje się, że to ma sens. – kidgu

+0

Jak to działa w przypadku powiązania danych z formantem, który dynamicznie wybieramy? – bgura

+1

Jak możemy wykonać wiążącą pracę w tym przypadku? Na przykład masz to: , ale w jaki sposób wiążemy właściwość Text do czegoś? Problem polega na tym, że TextBox nie ma DataContext i nie widzi datacontext rodzica. – nightcoder

Powiązane problemy