将 DataGirdComboBoxColumn 绑定到 DataSet 不起作用
Binding DataGirdComboBoxColumn to DataSet doesn't work
我想在数据网格中创建一个简单的主从视图。
我尝试将 DataGirdComboBoxColumn
绑定到 DataSet
,但它不起作用。
这是我的 xaml 代码:
<DataGrid x:Name="DataGrid1" Grid.Column="0" Grid.Row="0" AlternatingRowBackground="#FFF0F0F0" ItemsSource="{Binding}" Height="420" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding AirplaneID}" IsReadOnly="True" MinWidth="30"/>
<DataGridTextColumn Header="Model" Binding="{Binding Model}" IsReadOnly="True" Width="Auto" MinWidth="160"/>
<DataGridTextColumn Header="Fuel" Binding="{Binding Fuel}" MinWidth="50" />
<DataGridComboBoxColumn x:Name="ComboBoxColumnPass" Header="Passenger" DisplayMemberPath="Name"
SelectedValueBinding="{Binding AirplaneID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="AirplaneID"/>
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Command="ApplicationCommands.New" ToolTip="Fügt eine neue Zeile hinzu"/>
<MenuItem Command="ApplicationCommands.Delete" ToolTip="Löscht das ausgewählte Element"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="12" TextWrapping="Wrap" Text="{Binding Detail}" />
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
这是我的 C# 代码:
namespace WpfApplicationAirplaneDB
{
AirplaneDBDataSet AirplaneDataSet = new AirplaneDBDataSet();
AirplaneDBDataSetTableAdapters.AirplaneTableAdapter AirTableAdapter = new AirplaneDBDataSetTableAdapters.AirplaneTableAdapter();
AirplaneDBDataSetTableAdapters.PassengerTableAdapter PassTableAdapter = new AirplaneDBDataSetTableAdapters.PassengerTableAdapter();
public MainWindow()
{
InitializeComponent();
AirTableAdapter.Fill(AirplaneDataSet.Airplane);
PassTableAdapter.Fill(AirplaneDataSet.Passenger);
DataGrid1.ItemsSource = AirplaneDataSet.Airplane.DefaultView;
ComboBoxColumnPass.ItemsSource = AirplaneDataSet.Passenger.DefaultView;
}
}
这是错误:
An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll
Additional information: TwoWay- oder OneWayToSource-Bindungen funktionieren nicht mit der schreibgeschützten Eigenschaft "AirplaneID" vom Typ "System.Data.DataRowView".
(抱歉德语例外)
AirplaneID 似乎是只读的。使其可写或将绑定更改为 OneWay。
我想在数据网格中创建一个简单的主从视图。
我尝试将 DataGirdComboBoxColumn
绑定到 DataSet
,但它不起作用。
这是我的 xaml 代码:
<DataGrid x:Name="DataGrid1" Grid.Column="0" Grid.Row="0" AlternatingRowBackground="#FFF0F0F0" ItemsSource="{Binding}" Height="420" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding AirplaneID}" IsReadOnly="True" MinWidth="30"/>
<DataGridTextColumn Header="Model" Binding="{Binding Model}" IsReadOnly="True" Width="Auto" MinWidth="160"/>
<DataGridTextColumn Header="Fuel" Binding="{Binding Fuel}" MinWidth="50" />
<DataGridComboBoxColumn x:Name="ComboBoxColumnPass" Header="Passenger" DisplayMemberPath="Name"
SelectedValueBinding="{Binding AirplaneID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="AirplaneID"/>
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Command="ApplicationCommands.New" ToolTip="Fügt eine neue Zeile hinzu"/>
<MenuItem Command="ApplicationCommands.Delete" ToolTip="Löscht das ausgewählte Element"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="12" TextWrapping="Wrap" Text="{Binding Detail}" />
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
这是我的 C# 代码:
namespace WpfApplicationAirplaneDB
{
AirplaneDBDataSet AirplaneDataSet = new AirplaneDBDataSet();
AirplaneDBDataSetTableAdapters.AirplaneTableAdapter AirTableAdapter = new AirplaneDBDataSetTableAdapters.AirplaneTableAdapter();
AirplaneDBDataSetTableAdapters.PassengerTableAdapter PassTableAdapter = new AirplaneDBDataSetTableAdapters.PassengerTableAdapter();
public MainWindow()
{
InitializeComponent();
AirTableAdapter.Fill(AirplaneDataSet.Airplane);
PassTableAdapter.Fill(AirplaneDataSet.Passenger);
DataGrid1.ItemsSource = AirplaneDataSet.Airplane.DefaultView;
ComboBoxColumnPass.ItemsSource = AirplaneDataSet.Passenger.DefaultView;
}
}
这是错误:
An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll Additional information: TwoWay- oder OneWayToSource-Bindungen funktionieren nicht mit der schreibgeschützten Eigenschaft "AirplaneID" vom Typ "System.Data.DataRowView".
(抱歉德语例外)
AirplaneID 似乎是只读的。使其可写或将绑定更改为 OneWay。