【问题标题】:DataGrid (MS.toolkit_) UWP How to get SelectedItemDataGrid (MS.toolkit_) UWP 如何获取 SelectedItem
【发布时间】:2018-10-26 12:30:22
【问题描述】:

我努力寻找如何在 UWP 应用程序的 dataGrid(Microsoft Toolkit)中删除一行。我根本找不到任何关于删除的信息。 该表是从 SQL 数据库填充的。我想在按下 Delete btn 后选择一行并获取所需项目的值。 我只能得到一个无用的 RowNumber(或没有??)。 乞求帮助。 谢谢。

Xaml:

    <controls:DataGrid
        Grid.Row="1"
        x:Name="NotebookListDataGrid"
        Margin="12"
        VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
        HorizontalScrollBarVisibility="Auto"
        VerticalScrollBarVisibility="Visible"
        AlternatingRowBackground="Transparent"
        AlternatingRowForeground="Gray"
        AreRowDetailsFrozen="False"
        AreRowGroupHeadersFrozen="True"
        AutoGenerateColumns="False"
        CanUserSortColumns="False"
        CanUserReorderColumns="True"
        CanUserResizeColumns="True"
        ColumnHeaderHeight="32"
        MaxColumnWidth="400"
        FrozenColumnCount="0"
        GridLinesVisibility="All"
        HeadersVisibility="Column"
        IsReadOnly="False"
        ItemsSource="{x:Bind Items1.DefaultItem}"
        RowDetailsVisibilityMode="Collapsed"
        SelectedItem="{x:Bind Items1.VarSelected, Mode=TwoWay}"
        SelectionChanged="NotebookList_SelectionChanged" IsRightTapEnabled="False">
        <controls:DataGrid.Columns>
            <controls:DataGridTextColumn Header="Фамилия" Binding="{Binding Name}"/>
            <controls:DataGridTextColumn Header="Имя" Binding="{Binding Name}"/>
            <controls:DataGridTextColumn Header="Модель телефона" Binding="{Binding Phone_model}"/>
            <controls:DataGridTextColumn Header="Номер телефона" Binding="{Binding Phone_number}"/>
            <controls:DataGridTextColumn Header="E-mail" Binding="{Binding Email_adress}"/>
        </controls:DataGrid.Columns>
    </controls:DataGrid>

C# 数据源:

public class Notebook_List : BindableBase
{
    public Notebook_List() => IsLoading = false;

    public ObservableCollection<Item> DefaultItem { get; private set; } = new ObservableCollection<Item>();

    private Item _VarSelected;
    public Item VarSelected
    {
        get => _VarSelected;
        set
        {
            Set(ref _VarSelected, value);
        }
    } ...

C# 动作:

public Notebook_List Items1 { get; } = new Notebook_List();

private void AppBarButton_Click_2(object sender, RoutedEventArgs e) //delete button
    {
        var deleteItem = Items1;
        textbox.Text = deleteItem.VarSelected.ToString();
    }

【问题讨论】:

  • 不就是从ItemsSource‘Notebook_items’中删除SelectedItem‘VarSelected’吗? DataGrid 正在绑定到数据源。
  • 是的,但是当我尝试从数据源获取“VarSelected”值时,我得到“一个值不能为空”。
  • 选择一行时是否触发了 SelectionChanged 事件?单击删除按钮时是否再次触发?
  • 我已经尝试让它变得简单 - 在 TextBox 中显示“VarSelected”的值,当我单击 Delete btn 时出现错误。我google了一下,如果我不需要创建一个新的类实例,我只需要从现有的获取“VarSelected”的值? (上面添加了一些代码)
  • ItemsSource 是错误的,它应该是 ObservableCollection,而不是 INotifyPropertyChanged ...您还没有正确理解绑定到项目集合;)

标签: c# uwp datagrid


【解决方案1】:

确保 DataGrid 的 ItemsSource 属性绑定到 ObservableCollection,当添加或删除项目或列表本身的属性发生更改时,该属性会向 UI 提供更改通知。

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 2013-10-08
    • 1970-01-01
    • 2019-12-21
    • 2020-10-27
    • 2019-11-17
    • 2019-07-09
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多