1

将 Xceed DataGrid 用于 WPF

如何使用生成的示例数据源(在 Expression Blend 中生成)作为 DataGridCollectionViewSource 的源?可能吗?

    <xcdg:DataGridCollectionViewSource x:Key="cvsSample"
                                     Source="{Binding Source={x:Static Application.Current},Path=SampleDataSource}"/>

这样做会引发错误:

不能将“DataGridCollectionViewSource”类型的值添加到“UIElementCollection”类型的集合或字典中。

我可以像这样直接在 DataGridControl 中设置它:

    <xcdg:DataGridControl ItemTemplate="{DynamicResource ItemTemplate}" 
                      ItemsSource="{Binding Collection, Source={StaticResource SampleDataSource}}"
                      UpdateSourceTrigger="CellContentChanged"
                      Margin="10">
    </xcdg:DataGridControl>

但我想使用 DataGridCollectionViewSource,因为它允许您使用过滤、分组等功能。

4

2 回答 2

1

尝试这个:

在此处输入图像描述

XAML:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <xcdg:DataGridCollectionViewSource x:Key="cvsSample" Source="{Binding}" />
    </Window.Resources>
    <Grid>
        <xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource cvsSample}}"/>
    </Grid>
</Window>

CS:

using Xceed.Wpf.Samples.SampleData;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DataContext = SampleDataProvider.GetProducts();
    }
}
于 2017-08-30T04:15:19.133 回答
1

看看 jstreet 的答案,但如果这对你不起作用,你可以尝试做我所做的。

在 Visual Studio 中,转到Project > Add Reference > Extensions并添加Xceed.Wpf.DataGrid.Samples.SampleData(记得选中它旁边的小框)。

应用程序.xaml.cs

    public partial class App : System.Windows.Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        Xceed.Wpf.DataGrid.Licenser.LicenseKey = "XXXXX-XXXXX-XXXXX-XXXX";

        DataSet musicDataSet = Xceed.Wpf.DataGrid.Samples.SampleData.DataProvider.GetMusicLibraryDataSet();
        m_songs = musicDataSet.Tables["Songs"];

        base.OnStartup(e);
    }

    private DataTable m_songs;

    public DataTable Songs
    {
        get
        {
            return m_songs;
        }
    }
}

主窗口.xaml

<Window.Resources>
    <xcdg:DataGridCollectionViewSource x:Key="cvsSongs"
                                     Source="{Binding Source={x:Static Application.Current},Path=Songs}">
    </xcdg:DataGridCollectionViewSource>
</Window.Resources>

<Grid>
    <xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource cvsSongs}}"/>
</Grid>

不敢相信我只是为了错过参考而挣扎了这么多……

于 2017-08-31T07:50:24.837 回答