हाँ ... दो तरीके। एक तो आप बस DataGrid
है कि इस तरह कॉलम सेट के लिए एक शैली में जोड़ सकते हैं ...
<Style x:Key="MyColumnDefsStyle" x:Shared="True" TargetType="DataGrid">
<Setter Property="Columns">
<Setter.Value>
<DataGridTextColumn Width="Auto" Header="Column 1" Binding="{Binding Path=Col1}"/>
<DataGridTextColumn Width="Auto" Header="Column 2" Binding="{Binding Path=Col2}"/>
<DataGridTextColumn Width="Auto" Header="Column 3" Binding="{Binding Path=Col3}"/>
<DataGridTextColumn Width="Auto" Header="Column 4" Binding="{Binding Path=Col4}"/>
</Setter.Value>
</Setter>
</Style>
<DataGrid Style="{StaticResource MyColumnDefsStyle}" ItemsSource="{Binding Foo1}" />
<DataGrid Style="{StaticResource MyColumnDefsStyle}" ItemsSource="{Binding Foo2}" />
<DataGrid Style="{StaticResource MyColumnDefsStyle}" ItemsSource="{Binding Foo3}" />
यही काम करता है लेकिन एक समस्या अगर आप इसे एक से अधिक ग्रिड कि खुद को पहले से ही एक शैली का उपयोग किया जा सकता है के लिए आवेदन कर रहे हैं प्रतिनिधित्व करता है।
उस स्थिति में, दूसरा, अधिक लचीला तरीका बेहतर काम करता है। हालांकि, ObservableCollection<DataGridColumn>
का प्रतिनिधित्व करने के लिए XAML- अनुकूल कक्षाएं बनाने की आवश्यकता है (हालांकि आपने तकनीकी रूप से केवल कॉलम कहा है, मैं खुद को पूरा करना चाहता हूं इसलिए मैं पंक्तियों के लिए भी एक करूंगा) फिर उन्हें उस स्थान पर जोड़ें जहां आप XAML में संदर्भित कर सकते हैं नामस्थान। (मैं मेरा xmlns:dge
'DataGridEnhancements' के लिए कहते हैं) फिर आप इस तरह उपयोग:
कोड में somwhere (मैं चाहता हूँ कि यह पहुंच एप्लिकेशन चौड़ा) ...
public class DataGridRowsCollection : ObservableCollection<DataGridRow>{}
public class DataGridColumnsCollection : ObservableCollection<DataGridColumn>{}
तब संसाधनों में
...
<dge:DataGridColumnsCollection x:Key="MyColumnDefs" x:Shared="True">
<DataGridTextColumn Width="Auto" Header="Column 1" Binding="{Binding Path=Col1}"/>
<DataGridTextColumn Width="Auto" Header="Column 2" Binding="{Binding Path=Col2}"/>
<DataGridTextColumn Width="Auto" Header="Column 3" Binding="{Binding Path=Col3}"/>
<DataGridTextColumn Width="Auto" Header="Column 4" Binding="{Binding Path=Col4}"/>
</dge:DataGridColumnsCollection>
और अंत में XAML में ...
<DataGrid Columns="{StaticResource MyColumnDefs}" ItemsSource="{Binding Foo1}" />
<DataGrid Columns="{StaticResource MyColumnDefs}" ItemsSource="{Binding Foo2}" />
<DataGrid Columns="{StaticResource MyColumnDefs}" ItemsSource="{Binding Foo3}" />
HTH,
मार्क
संपादित करें: जब से तुम DataGrid.Columns
गुण सेट नहीं कर सकते हैं, तो आप करने की जरूरत है बढ़ाने अपने DataGridView
(टिप्पणी में उल्लेख किया)।
public class EnhancedDataGrid : DataGrid
{
//the dependency property for 'setting' our columns
public static DependencyProperty SetColumnsProperty = DependencyProperty.Register(
"SetColumns",
typeof (ObservableCollection<DataGridColumn>),
typeof (EnhancedDataGrid),
new FrameworkPropertyMetadata
{
DefaultValue = new ObservableCollection<DataGridColumn>(),
PropertyChangedCallback = EnhancedDataGrid.SetColumnsChanged,
AffectsRender = true,
AffectsMeasure = true,
AffectsParentMeasure = true,
IsAnimationProhibited = true,
DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
});
//callback to reset the columns when our dependency property changes
private static void SetColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var datagrid = (DataGrid) d;
datagrid.Columns.Clear();
foreach (var column in (ObservableCollection<DataGridColumn>)e.NewValue)
{
datagrid.Columns.Add(column);
}
}
//The dependency property wrapper (so that you can consume it inside your xaml)
public ObservableCollection<DataGridColumn> SetColumns
{
get { return (ObservableCollection<DataGridColumn>) this.GetValue(EnhancedDataGrid.SetColumnsProperty); }
set { this.SetValue(EnhancedDataGrid.SetColumnsProperty, value); }
}
}
अब आप SetColumns साथ कॉलम सेट कर सकते हैं अपने CustomControl में बनाया संपत्ति निर्भरता:
<custom:EnhancedDataGrid SetColumns="{StaticResource MyColumnDefs}" ItemsSource="{Binding Foo1}" />
<custom:EnhancedDataGrid SetColumns="{StaticResource MyColumnDefs}" ItemsSource="{Binding Foo2}" />
<custom:EnhancedDataGrid SetColumns="{StaticResource MyColumnDefs}" ItemsSource="{Binding Foo3}" />
समान प्रश्न, उपयोगी जवाब: यहाँ एक
EnhancedDataGrid
के लिए कोड है http://stackoverflow.com/प्रश्न/5716123/wpf-datagrid-कॉलम-इन-स्टाइल-या-संसाधन – surfen