Я создал UserControl для многократного использования в моей программе:Binding недвижимости во время выполнения
GroupPanel.xaml:
<UserControl x:Class="View.UserControls.GroupPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"assembly=ViewModel"
Name="root">
<DockPanel>
<DataGrid DockPanel.Dock="Top"
AutoGenerateColumns="False"
CanUserAddRows="True"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
DataContext="{Binding ElementName=root}"
ItemsSource="{Binding DataGridItemSource}"
Name="mainGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="Nr/Unit"
Binding="{Binding Nr}" />
<DataGridTextColumn Header="Text"
Binding="{Binding Text}" />
<DataGridTextColumn Header="Comment"
Binding="{Binding Comment}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="Delete" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
и Dependency Property, чтобы установить ItemsSource в DataGrid в:
GroupPanel.xaml .cs:
public static readonly DependencyProperty DataGridItemSourceProperty =
DependencyProperty.Register("DataGridItemSource", typeof(IEnumerable), typeof(GroupPanel),
new PropertyMetadata(null));
public IEnumerable DataGridItemSource
{
get { return (IEnumerable)GetValue(DataGridItemSourceProperty); }
set { SetValue(DataGridItemSourceProperty, value); }
}
У меня есть окно, где мне нужен этот UserControl 2 раза с помощью разных ItemsSources для привязки. Но оба источника имеют одинаковые свойства до первого свойства. Источниками являются:
GroupNumber:
Number, int
Text, string
Comment, string
GroupUnit:
Unt, int
Text, string
Comment, string
Поведение одинаково для обоих из них. Есть ли способ установить привязку столбца 1 DataGrid в зависимости от ItemsSource?
Я пытался что-то вроде этого:
void GroupPanel_Loaded(object sender, RoutedEventArgs e)
{
var type = DataGridItemSource.GetType();
if(type.FullName.Contains("GroupNumber"))
{
}
}
Но я не знаю, как установить столбцы обязательные внутри, если ...
Спасибо заранее
Я предлагаю вам прочитать о 'DataTemplate'. Здесь вам не нужен «UserControl», вы можете просто определить «Стиль» для своего «DataGrid» и повторно использовать его. – dymanoid
WPF использует XAML, а XAML - подробный ... просто привыкнуть к нему. определение программных столбцов DataGrid' - это * не * путь. Вы часто будете иметь дублированные разделы XAML, но поверьте мне ... в конечном итоге вы упростите себя, если вы просто примете этот факт. Это возможно *. См. Событие ['DataGrid.AutoGeneratingColumn'] (https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.autogeneratingcolumn (v = vs.110) .aspx) на MSDN. – Sheridan