【问题标题】:WPF Bind ListBoxItem to DataGridWPF 将 ListBoxItem 绑定到 DataGrid
【发布时间】:2015-05-31 18:43:12
【问题描述】:

我需要通过以下方式绑定 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;
}

并且类 Query public class Query : INotifyPropertyChanged 具有代码中使用的所有属性,因此没有错误。

虽然数据被正确检索,但 DataGrid 根本没有反应。可能是绑定或设置DataContext有一些错误。

您能帮我正确绑定 ListBoxItem DoubleMouseClick 和 DataGrid DataContext 吗?我应该为此创建一个单独的类吗?

【问题讨论】:

  • 更改为 GridStatistics.ItemsSource=dt;
  • @RezaArabQaeni 不幸的是,没有属性 DataSource :(
  • 对,我把它编辑到 ItemsSource。
  • @RezaArabQaeni ItemsSource 采用 IEnumerable,但 dt 是 DataTable

标签: c# wpf datagrid data-binding


【解决方案1】:
Try it :

using (var cmd = new MySqlCommand(item.Text, connection))
{
     .
     .
     GridStatistics.ItemsSource =  dt.DefaultView;

}  

【讨论】:

    【解决方案2】:

    解决了这个问题:

    1) 添加这个:

    public DataTable StatisticsDataTable { get; private set; }
    

    2)然后在这里更改我的方法部分:

                    StatisticsDataTable = dt;
                    GridStatistics.DataContext = StatisticsDataTable;
    

    3) XAML 绑定如下:

    ItemsSource="{Binding}"
    

    感谢所有试图提供帮助的人!

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 2023-04-06
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多