2013-02-01 13 views
5

Wpf में भिन्न प्रकार का नियंत्रण हो सकता है, क्या मैं एक डाटाग्रिड बना सकता हूं जिसमें अलग-अलग पंक्ति में एक ही कॉलम में विभिन्न प्रकार के नियंत्रण होते हैं?क्या डेटाग्रिड कॉलम में अलग-अलग पंक्ति

सबसे आसान मामले के लिए: 5 कॉलम, 2 पंक्तियाँ, साथ datagrid बारे में 4 पहले कॉलम परवाह नहीं है, 5 वीं col में:

  • 1 ली पंक्ति: यह एक बता गया है: यह एक पाठ बॉक्स
  • 2 पंक्ति है ।

धन्यवाद!

उत्तर

6

आप एक DataGridTemplateColumn कुछ चलाता के साथ संयुक्त इस कार्यक्षमता को प्राप्त करने के लिए उपयोग कर सकते हैं:

इस देखें।

यह एक डेमो एप्लिकेशन है जो डेटाग्रिड को (स्ट्रिंग) नियंत्रण प्रकारों की सूची में बांधता है। पहला कॉलम केवल नियंत्रण प्रकार स्ट्रिंग प्रदर्शित करता है, और दूसरा कॉलम इसी नियंत्रण पर संबंधित नियंत्रण प्रस्तुत करने के लिए कार्य करता है। आप XAML में थोड़ा और अधिक संक्षिप्त बनाने के लिए सक्षम हो सकता है, लेकिन यह यह की jist है:

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> 

कोड-पीछे और देखें मॉडल:

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

धन्यवाद लड़का, मैं इसे अभी कर सकता हूं। मुझे एक निर्देश मिला जो समझने में काफी आसान है: http://code.msdn.microsoft.com/mag201104DataPoints। मैं अभी तक आपके निर्देश की कोशिश नहीं करता, लेकिन ऐसा लगता है। – kidgu

+0

यह नियंत्रण के लिए बाध्यकारी डेटा के साथ कैसे काम करेगा जो हम गतिशील रूप से चुन रहे हैं? – bgura

+1

हम इस मामले में बाध्यकारी काम कैसे कर सकते हैं? उदाहरण के लिए, आपके पास यह है: <टेक्स्टबॉक्स टेक्स्ट = "डिफ़ॉल्ट टेक्स्ट" />, लेकिन हम टेक्स्ट प्रॉपर्टी को किसी चीज़ से कैसे बांध सकते हैं? समस्या यह है कि टेक्स्टबॉक्स में डेटाकॉन्टेक्स्ट नहीं है और यह माता-पिता के डेटाकॉन्टेक्स्ट को नहीं देखता है। – nightcoder

संबंधित मुद्दे