/ / Textboxes, обвързани с SelectedItem на код, създаден зад DataGrid, не се актуализират - c #, wpf, xaml, datagrid

Текстовите полета, обвързани с SelectedItem, на код, създаден зад DataGrid, не се актуализират - c #, wpf, xaml, datagrid

Аз експериментирам с код, създаден зад WPFмаски като прототип за WPF маска дизайнер. В моя ViewModel имам DataTable и DataView (което е просто DefaultView на DataTable). В моя DataTable имам две колони ("vorname" и "nachname") и четири реда. В моята WPF маска искам да имам DataGrid и две TextBoxes, които са обвързани с SelectedItem на DataGrid и колоните (или "vorname" или "nachname"). Когато изберете елемент в DatGrid по време на изпълнение, данните от този елемент ще бъдат показани в текстовите полета.

Първо се опитах да дефинирам DataGrid в XAMLфайл и генериране на TextBoxes и техните свързвания в код. Тук работи добре. Избирам елемент в DataGrid и данните в елемента се показват в текстовите полета.

Но когато генерирам решетка в кода, тя вече не работи. Има ли някакъв вид NotifyOnSelectedIndexChanged, който ми липсва?

Всяка помощ ще бъде оценена.

Това е XAML:

<Window x:Class="DesignerTest.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestWindow"
Height="400"
Width="600">
<DockPanel x:Name="mainpanel">
<!--<DataGrid x:Name="datagrid"
DockPanel.Dock="Top"
Height="120" />-->
<WrapPanel x:Name="wrappanel">
<!--<TextBox x:Name="vornameSelected" Width="150" Margin="5" Text="{Binding SelectedItem.vorname, ElementName=datagrid}" IsEnabled="False" />
<TextBox x:Name="nachnameSelected" Width="150" Margin="5" Text="{Binding SelectedItem.nachname, ElementName=datagrid}" IsEnabled="False" />-->
<!--<TextBox x:Name="vornameSelected" Width="150" Margin="5" IsEnabled="False" />
<TextBox x:Name="nachnameSelected" Width="150" Margin="5" IsEnabled="False" />-->
</WrapPanel>
</DockPanel>
</Window>

И това е кодът за създаване и обвързване:

    // The ViewModel und the DataTable are created.
_vm = new SerializingTestViewModel();
_vm.CreateDataTable();
this.DataContext = _vm.DataTable;

// The DataGrid  and it"s Binding are created.
DataGrid datagrid = new DataGrid();
datagrid.Name = "datagrid";
DockPanel.SetDock(datagrid, Dock.Top);
datagrid.Height = 120;
datagrid.ItemsSource = _vm.DataSource;
mainpanel.Children.Add(datagrid);

// The Textboxes and the Bindings are created.
TextBox vornameSelected = new TextBox();
vornameSelected.Name = "vornameSelected";
vornameSelected.Width = 150;
Thickness margin = new Thickness(5);
vornameSelected.SetValue(TextBox.MarginProperty, margin);
vornameSelected.IsEnabled = false;
Binding selectedItemBinding = new Binding();
selectedItemBinding.ElementName = "datagrid";
selectedItemBinding.Path = new PropertyPath("SelectedItem.vorname");
vornameSelected.SetBinding(TextBox.TextProperty, selectedItemBinding);
wrappanel.Children.Add(vornameSelected);

TextBox nachnameSelected = new TextBox();
nachnameSelected.Name = "nachnameSelected";
nachnameSelected.Width = 150;
margin = new Thickness(5);
nachnameSelected.SetValue(TextBox.MarginProperty, margin);
nachnameSelected.IsEnabled = false;
selectedItemBinding = new Binding();
selectedItemBinding.ElementName = "datagrid";
selectedItemBinding.Path = new PropertyPath("SelectedItem.nachname");
nachnameSelected.SetBinding(TextBox.TextProperty, selectedItemBinding);
wrappanel.Children.Add(nachnameSelected);

Отговори:

0 за отговор № 1

Опитайте да зададете източника на свързване, като използвате Source собственост вместо ElementName

//selectedItemBinding.ElementName = "datagrid"
selectedItemBinding.Source = datagrid;

Проблемът може да е, че ElementName търсенето на елементи не работи както се очаква, защото елементите се добавят динамично по време на изпълнение чрез код зад.