У меня есть Wpf DatarGrid, который привязан к списку клиентов.Здесь я хочу, чтобы, когда я выбираю одного клиента в сетке данных и нажимал кнопку «Обновить», открывалось окно.Это новое окно имеет вкладку управления.затем второй раз, когда я нажимаю на обновление для другого пользователя в сетке данных, вторая вкладка должна открыться в этом уже открытом новом окне.Для этого я хочу привязать элемент управления Tab только к строке Выбранный клиент, а не к ObservableCollection или списку.Но когда я связываю SelectedCustomer со свойством Itemssource, оно не работает, поскольку заголовок становится пустым.Для заголовка у меня есть Itemtemplate, внутри которого текстовый блок связан со свойством SelectedCustomer, как name.
Какое решение для этого?
Моя сетка данных выглядит следующим образом -
<DataGrid Width="700" Height="500" Margin="20" AutoGenerateColumns="False" IsReadOnly="True" SelectedItem="{Binding SelectedCustomer}" ItemsSource="{Binding Customers}">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"></DataGridTextColumn>
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"></DataGridTextColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Margin="5" Click="Update_Clicked">Update</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Margin="5">Delete</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Здесь вы можете видеть, что свойство selecteditem привязано к SelectedCustomer.Теперь окно управления вкладками выглядит так -
<TabControl Name="UserTabs" ItemsSource="{Binding}">
<TabControl.ItemTemplate>
<DataTemplate DataType="TabItem">
<TextBlock Text="{Binding FirstName}"></TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<Grid Height="226" Margin="4">
<Grid.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="2,2,2,2" />
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0">First Name :</TextBlock>
<TextBlock Grid.Column="0" Grid.Row="1">Last Name :</TextBlock>
<TextBlock Grid.Column="0" Grid.Row="2">Email Address :</TextBlock>
<TextBlock Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" HorizontalAlignment="Left"><Hyperlink>Address :</Hyperlink></TextBlock>
<TextBlock Grid.Column="0" Grid.Row="4">City :</TextBlock>
<TextBox Grid.Column="1" Grid.Row="0" Text="{Binding FirstName}"></TextBox>
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding LastName}"></TextBox>
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding EmailAddress}"></TextBox>
<TextBox Grid.Column="1" Grid.Row="4" Text="{Binding City}"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="0">State :</TextBlock>
<TextBlock Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center"><Hyperlink>Orders :</Hyperlink></TextBlock>
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
<TextBlock Grid.Column="2" Grid.Row="4"></TextBlock>
<TextBlock Grid.Column="2" Grid.Row="5"></TextBlock>
<TextBox Grid.Column="3" Grid.Row="0" Text="{Binding State}"></TextBox>
<TextBlock Grid.Column="3" Grid.Row="1"></TextBlock>
<TextBlock Grid.Column="3" Grid.Row="2"></TextBlock>
<TextBlock Grid.Column="3" Grid.Row="3"></TextBlock>
<TextBlock Grid.Column="3" Grid.Row="4"></TextBlock>
<TextBlock Grid.Column="3" Grid.Row="5"></TextBlock>
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
Как вы можете видеть, я использовал Itemssource = {Binding}, что означает, что Itemssource связан с SelectedCustomer, потому что в коде позади я установил
this.datacontext = SelectedCustomer
А затем в ItemTemplate и Content Template привязали текстовые блоки и текстовые поля к свойствам SelectedCustomer, используя
{Binding <PropertyName>}