datagrid.ItemsSource = datatable.AsDataView();相当于XAML

时间:2013-09-17 10:03:57

标签: wpf xaml

我在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。

2 个答案:

答案 0 :(得分:1)

您可以使用DataTable.AsEnumerable()将DataTable强制转换为泛型集合,并将其作为Source赋予CollectionViewSource。

像 -

IEnumerable YourType&gt; vr = YourDataTable.AsEnumerable();

CollectionViewSource x:Key =“cvs”Source =“{Binding vr}”&gt;

答案 1 :(得分: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}}}" />

就是这样。