WPF 将 ListBoxItem 绑定到 DataGrid
WPF Bind ListBoxItem to DataGrid
我需要按以下方式绑定 ListBoxItem 和 DataGrid:
用户双击 ListBoxItem 并执行 sql 查询,检索到的数据显示在 DataGrid 上。
这是我拥有的:
<DataGrid x:Name="GridStatistics" Margin="0,144,0,0" />
<ListBox x:Name="LstStat" HorizontalAlignment="Left" Height="129" Margin="10,10,0,0"
VerticalAlignment="Top" Width="330" FontSize="16"
ItemsSource="{Binding StatisticsQueries}" Cursor="Arrow" PreviewMouseRightButtonDown="LstStat_PreviewMouseRightButtonDown" PreviewMouseRightButtonUp="LstStat_PreviewMouseRightButtonUp" MouseDoubleClick="LstStat_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" FontWeight="Medium" FontSize="18" FontFamily="HelveticaNeueCyr"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Show" Click="MenuItem_OnClick" />
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
还有我的 C# 代码:
public ObservableCollection<Query> StatisticsQueries {get{...}}
private void LstStat_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (LstStat.SelectedIndex < 0) return;
var item = LstStat.SelectedItem as Query;
using (var connection = new MySqlConnection(DatabaseModel.ConnectionString))
{
connection.Open();
if (item != null)
using (var cmd = new MySqlCommand(item.Text, connection))
{
var dt = new DataTable();
var adapter = new MySqlDataAdapter(cmd);
adapter.Fill(dt);
GridStatistics.DataContext = dt;
}
connection.Close();
}
e.Handled = true;
}
并且 class 查询 public class Query : INotifyPropertyChanged
具有代码中使用的所有属性,因此没有错误。
虽然数据检索正确,但DataGrid 根本没有反应。可能在绑定或设置DataContext时有一些错误。
能否帮我正确绑定ListBoxItem DoubleMouseClick 和DataGrid DataContext?我应该为此创建一个单独的 class 吗?
解决了这个问题:
1) 添加:
public DataTable StatisticsDataTable { get; private set; }
2) 然后在此处更改我的方法部分:
StatisticsDataTable = dt;
GridStatistics.DataContext = StatisticsDataTable;
3) XAML 绑定如下:
ItemsSource="{Binding}"
感谢所有试图提供帮助的人!
Try it :
using (var cmd = new MySqlCommand(item.Text, connection))
{
.
.
GridStatistics.ItemsSource = dt.DefaultView;
}
我需要按以下方式绑定 ListBoxItem 和 DataGrid: 用户双击 ListBoxItem 并执行 sql 查询,检索到的数据显示在 DataGrid 上。 这是我拥有的:
<DataGrid x:Name="GridStatistics" Margin="0,144,0,0" />
<ListBox x:Name="LstStat" HorizontalAlignment="Left" Height="129" Margin="10,10,0,0"
VerticalAlignment="Top" Width="330" FontSize="16"
ItemsSource="{Binding StatisticsQueries}" Cursor="Arrow" PreviewMouseRightButtonDown="LstStat_PreviewMouseRightButtonDown" PreviewMouseRightButtonUp="LstStat_PreviewMouseRightButtonUp" MouseDoubleClick="LstStat_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" FontWeight="Medium" FontSize="18" FontFamily="HelveticaNeueCyr"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Show" Click="MenuItem_OnClick" />
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
还有我的 C# 代码:
public ObservableCollection<Query> StatisticsQueries {get{...}}
private void LstStat_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (LstStat.SelectedIndex < 0) return;
var item = LstStat.SelectedItem as Query;
using (var connection = new MySqlConnection(DatabaseModel.ConnectionString))
{
connection.Open();
if (item != null)
using (var cmd = new MySqlCommand(item.Text, connection))
{
var dt = new DataTable();
var adapter = new MySqlDataAdapter(cmd);
adapter.Fill(dt);
GridStatistics.DataContext = dt;
}
connection.Close();
}
e.Handled = true;
}
并且 class 查询 public class Query : INotifyPropertyChanged
具有代码中使用的所有属性,因此没有错误。
虽然数据检索正确,但DataGrid 根本没有反应。可能在绑定或设置DataContext时有一些错误。
能否帮我正确绑定ListBoxItem DoubleMouseClick 和DataGrid DataContext?我应该为此创建一个单独的 class 吗?
解决了这个问题:
1) 添加:
public DataTable StatisticsDataTable { get; private set; }
2) 然后在此处更改我的方法部分:
StatisticsDataTable = dt;
GridStatistics.DataContext = StatisticsDataTable;
3) XAML 绑定如下:
ItemsSource="{Binding}"
感谢所有试图提供帮助的人!
Try it :
using (var cmd = new MySqlCommand(item.Text, connection))
{
.
.
GridStatistics.ItemsSource = dt.DefaultView;
}