我可以在不更改数据源的情况下删除数据网格的元素吗?

时间:2014-01-30 11:24:58

标签: c# wpf datagrid datasource

我想在不更改数据源的情况下删除数据网格的元素。

当我选择将我的数据网格绑定到我的数据库测试时,它可以工作。 我的数据网格显示了我的2列:" ID"和"姓名"具体的行。 我可以在我的数据网格中添加行并将其保存到我的数据库中。

但是现在我想显示没有任何元素的列的名称,因此用户可以添加行而不会看到我的数据库的元素。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

我建议,创建一个Type Custom Class的ObservableCollection,你将拥有IsVisible属性。默认值为false,如果IsVisible = false,则可以在xaml中添加逻辑,然后从网格中隐藏该行。

public ObservableCollection<GridInfo> Data { get; set; }

public class GridInfo
{
    public bool IsVisible { get; set; } 
    // other properties will come like this
}

在XAML中,您可以使用具有网格行的Visibility属性的转换器,如下所示。

Visibility="{Binding IsVisible, Converter={StaticResource VisibilityConverter}}"

你将拥有如下转换器:

public class VisibilityConverter : IValueConverter
{
    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        bool visibility = !(bool)value;
        return visibility ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        Visibility visibility = (Visibility)value;
        return (visibility == Visibility.Visible);
    }
}

答案 1 :(得分:0)

将DataGrid的DataSource绑定到类型

的属性
ObservableCollection<T>

这样,只要集合发生变化,数据源就会得到通知。

答案 2 :(得分:-1)

假设您对Binding属性的DataGrid.ItemsSource正确,那么添加新空行所需要做的就是向数据绑定集合中添加一个新项:

<DataGrid ItemsSource="{Binding Items}" ... />

...

Items.Add(new YourItemtype());

如果 正确BindingDataGrid.ItemsSource属性,则 就是您需要做的事情。创建数据类型类型的属性:

public ObservableCollection<YourItemtype> Items { get; set; }

当然,请确保将DataContext设置为包含该属性的正确数据源。