将 ListBox 选定项数据绑定到 DataGrid WPF 的最佳方法
The best way to databind a ListBox Selected Item to DataGrid WPF
嗨,这里是新的 WPF 程序员。我似乎无法让它发挥作用,我希望你可能有一些想法。我希望当我 select 用户定义 table (ListBox) 中的一个项目时,它将数据 (ObservableCollection) 填充到我的数据网格中。然后我将使用下面的插入编辑保存按钮进行编辑。用户定义的每个项目 Table (ListBox) 都有多个选择和描述。
我有一个 XAML 看起来像这样:
<Grid HorizontalAlignment="Left" Height="505" VerticalAlignment="Top" Width="805">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="210*"/>
<ColumnDefinition Width="233*"/>
<ColumnDefinition Width="315*"/>
<ColumnDefinition Width="47*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="33*"/>
<RowDefinition Height="217*"/>
<RowDefinition Height="86*"/>
<RowDefinition Height="89*"/>
<RowDefinition Height="81*"/>
</Grid.RowDefinitions>
<ListBox x:Name="_listbox" HorizontalAlignment="Left" Height="103" VerticalAlignment="Top" Width="210" Margin="0,1,0,0" Grid.Row="1">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Selected}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBoxItem Content="ARNotes" />
<ListBoxItem Content="Item2"/>
<ListBoxItem Content="Item3"/>
<ListBoxItem Content="Item4"/>
<ListBoxItem Content="Item5"/>
<ListBoxItem Content="Item6"/>
</ListBox>
<ComboBox HorizontalAlignment="Left" Height="30" Margin="4,0,0,0" VerticalAlignment="Top" Width="257" Grid.Column="2">
<ComboBoxItem Content="FromCompanyTable"/>
</ComboBox>
<DataGrid x:Name="_grid" ItemsSource="{Binding SelectedItem, ElementName=_listbox}" AutoGenerateColumns="False" Grid.ColumnSpan="2" Grid.Column="1" Margin="24,2,0,3" Grid.Row="1" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="Choice" Width="*" Header="Choice" Binding="{Binding choice}"/>
<DataGridTextColumn x:Name="Descip" Width="*" Header="Description" Binding="{Binding description}"/>
</DataGrid.Columns>
</DataGrid>
还有我的模特:
public class NoteList : ObservableCollection<ARNotes>
{
public NoteList() : base()
{
Add(new ARNotes("A", "Adjustment"));
Add(new ARNotes("C", "Changed"));
Add(new ARNotes("D", "Notes"));
Add(new ARNotes("G", "Information"));
}
}
public class ARNotes
{
private string choice;
private string description;
public ARNotes(string choice, string description)
{
this.choice = choice;
this.description = description;
}
public string Choice
{
get { return choice; }
set { choice = value; }
}
public string Description
{
get { return description; }
set { description = value; }
}
}
ItemsSource 需要是项目的集合。您正在将其设置为单个项目。拥有 ListBox 不会给您带来任何好处。我建议只使用 DataGrid 并将 ItemsSource 绑定到您的 NoteList
嗨,这里是新的 WPF 程序员。我似乎无法让它发挥作用,我希望你可能有一些想法。我希望当我 select 用户定义 table (ListBox) 中的一个项目时,它将数据 (ObservableCollection) 填充到我的数据网格中。然后我将使用下面的插入编辑保存按钮进行编辑。用户定义的每个项目 Table (ListBox) 都有多个选择和描述。
我有一个 XAML 看起来像这样:
<Grid HorizontalAlignment="Left" Height="505" VerticalAlignment="Top" Width="805">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="210*"/>
<ColumnDefinition Width="233*"/>
<ColumnDefinition Width="315*"/>
<ColumnDefinition Width="47*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="33*"/>
<RowDefinition Height="217*"/>
<RowDefinition Height="86*"/>
<RowDefinition Height="89*"/>
<RowDefinition Height="81*"/>
</Grid.RowDefinitions>
<ListBox x:Name="_listbox" HorizontalAlignment="Left" Height="103" VerticalAlignment="Top" Width="210" Margin="0,1,0,0" Grid.Row="1">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Selected}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBoxItem Content="ARNotes" />
<ListBoxItem Content="Item2"/>
<ListBoxItem Content="Item3"/>
<ListBoxItem Content="Item4"/>
<ListBoxItem Content="Item5"/>
<ListBoxItem Content="Item6"/>
</ListBox>
<ComboBox HorizontalAlignment="Left" Height="30" Margin="4,0,0,0" VerticalAlignment="Top" Width="257" Grid.Column="2">
<ComboBoxItem Content="FromCompanyTable"/>
</ComboBox>
<DataGrid x:Name="_grid" ItemsSource="{Binding SelectedItem, ElementName=_listbox}" AutoGenerateColumns="False" Grid.ColumnSpan="2" Grid.Column="1" Margin="24,2,0,3" Grid.Row="1" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="Choice" Width="*" Header="Choice" Binding="{Binding choice}"/>
<DataGridTextColumn x:Name="Descip" Width="*" Header="Description" Binding="{Binding description}"/>
</DataGrid.Columns>
</DataGrid>
还有我的模特:
public class NoteList : ObservableCollection<ARNotes>
{
public NoteList() : base()
{
Add(new ARNotes("A", "Adjustment"));
Add(new ARNotes("C", "Changed"));
Add(new ARNotes("D", "Notes"));
Add(new ARNotes("G", "Information"));
}
}
public class ARNotes
{
private string choice;
private string description;
public ARNotes(string choice, string description)
{
this.choice = choice;
this.description = description;
}
public string Choice
{
get { return choice; }
set { choice = value; }
}
public string Description
{
get { return description; }
set { description = value; }
}
}
ItemsSource 需要是项目的集合。您正在将其设置为单个项目。拥有 ListBox 不会给您带来任何好处。我建议只使用 DataGrid 并将 ItemsSource 绑定到您的 NoteList