我在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。
答案 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}}}" />
就是这样。