繁体   English   中英

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;
}

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

尽管可以正确检索数据,但DataGrid完全不响应。 绑定或设置DataContext可能存在一些错误。

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

Try it :

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

}  

解决了这样做的问题:

1)添加:

public DataTable StatisticsDataTable { get; private set; }

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

                StatisticsDataTable = dt;
                GridStatistics.DataContext = StatisticsDataTable;

3)XAML绑定如下:

ItemsSource="{Binding}"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM