将 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