0

我在 WPF 中有一个带有 XAML 的项目:

<Window.Resources>
    <CollectionViewSource x:Key="cvs" Source="{Binding}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="Group"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>
<Grid  >
    <DataGrid Name="datagrid1" ItemsSource="{Binding Source={StaticResource cvs}}" >
    </DataGrid>
</Grid> 

文件如下.cs

public partial class MainWindow : Window
{
    public DataTable dt;
    public MainWindow()
    {
        InitializeComponent();
        dt = new DataTable();
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Age", typeof(int));
        dt.Columns.Add("Group", typeof(int));
        dt.Rows.Add(new object[3] { "Mary", 22, 1 });
        dt.Rows.Add(new object[3] { "Peter", 24, 3 });
        dt.Rows.Add(new object[3] { "Rose", 17, 1 });
        dt.Rows.Add(new object[3] { "John", 19, 2 });
        dt.Rows.Add(new object[3] { "Steven", 20, 1 });
        dt.Rows.Add(new object[3] { "Tom", 20, 3 });
        datagrid1.ItemsSource = dt.AsDataView();
        //DataContext = dt.AsDataView(); 
    }
}

我只想将代码移动datagrid1.ItemsSource = dt.AsDataView();到 XAML。

4

2 回答 2

1

您可以使用 DataTable.AsEnumerable() 将 DataTable 转换为通用集合,并将其作为 Source 提供给 CollectionViewSource。

喜欢-

IEnumerable YourType> vr = YourDataTable.AsEnumerable();

CollectionViewSource x:Key="cvs" Source="{Binding vr}">

于 2013-09-17T12:02:44.630 回答
0

首先,您需要创建一个DependencyProperty包含您的DataView

public static readonly DependencyProperty DataViewProperty = DependencyProperty.
    Register("DataView", typeof(DataView), typeof(MainWindow));

public DataView DataView
{
    get { return (DataView)GetValue(DataViewProperty); }
    set { SetValue(DataViewProperty, value); }
}

设置此属性:

DataView = dt.AsDataView(); 

然后你需要在你的 UI 中绑定这个:

<DataGrid Name="datagrid1" ItemsSource="{Binding DataView, RelativeSource={
    RelativeSource FindAncestor, AncestorType={x:Type MainWindow}}}" />

而已。

于 2013-09-17T10:12:39.633 回答