【问题标题】:WPF Datagrid with dynamic columns, with different event listeners具有动态列的 WPF Datagrid,具有不同的事件侦听器
【发布时间】:2020-09-08 05:54:40
【问题描述】:

我正在使用 MVVM 模式构建应用程序。

我的问题是我的网格应该有动态数量的列,这意味着不可能简单地将 Collection 绑定到 itemsource。 因此,我在网上搜索并发现我可以使用 Dataview。 现在可以通过代码创建列,但是我遇到了不同事件的问题。

如果用户选择一个或多个单元格,我需要一个监听器。我需要开始列/行和结束列/行。

此外,如果用户将鼠标悬停在每个单元格的单元格上(我认为是工具提示?),我想显示文本。 我从数据库中获取每个单元格的内容。内容是一个简单的字母和一个文本,当我将鼠标悬停在单元格上时应该出现。

Xaml:

 <DataGrid  ItemsSource="{Binding DataView, Mode=TwoWay}" AutoGenerateColumns="True"  SelectionUnit="Cell"  SelectionChanged="DataGrid_SelectionChanged">



       
    </DataGrid>

我的视图模型:

    private DataView _dataView;
    public DataView DataView
    {
        get { return _dataView; }
        set
        {
            _dataView = value;
            OnPropertyChanged("DataView");
        }
    }

 public MainWindowViewModel(IWindowController windowController) : base(windowController)
    {
        DataColumn colItem = new DataColumn("Arbeiter",
        Type.GetType("System.String"));
        ToolTip = " YAYA";
        DataTable table = new DataTable("table");
        table.Columns.Add(colItem);
        DateTime date = new DateTime(2021, 1, 1);

        DateTime start = DateTime.Now;
        for (long i = 0; i < (date -DateTime.Now).Days; i++) {
            colItem = new DataColumn(start.ToShortDateString(), Type.GetType("System.String"));
            start = start.AddDays(1);
            table.Columns.Add(colItem);
        }
      
       
        DataRow NewRow;
        DataColumn newCol;

        for (int i = 0; i < 5; i++)
        {
            NewRow = table.NewRow();
            NewRow["Arbeiter"] = "TEST";
            table.Rows.Add(NewRow);
        }
        // Change the values in the table.
        table.AcceptChanges();
        table.Rows[0]["Arbeiter"] = "FH";
        table.Rows[1]["Arbeiter"] = "WA";
        table.Rows[2]["Arbeiter"] = "FD";
       
        
        DataView view = new DataView(table);

}

【问题讨论】:

    标签: c# wpf .net-core


    【解决方案1】:

    为了获取有关所选单元格的信息,请尝试使用:

    private void On_Click(object sender, RoutedEventArgs e)
    {
        var menuItem = (MenuItem)sender;
        var contextMenu = (ContextMenu)menuItem.Parent;
        var grid = (DataGrid)contextMenu.PlacementTarget;
    }
    

    grid.SelectedCells 将为您提供一个IList&lt;DataGridCellInfo&gt;,它是您当前选中的那些单元格的列表。

    【讨论】:

      【解决方案2】:

      您可以为数据网格单元格编写模板并通过使用交互支持获取鼠标悬停事件句柄来具有附加属性吗?

      这可能对你有帮助...

      【讨论】:

      • 如何为数据网格创建这样的模板?我是新手。
      猜你喜欢
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2023-03-30
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      相关资源
      最近更新 更多