您好我正在尝试遍历数据网格中的行 如果我使用:
PagedCollectionView pgView = dataGrid.ItemsSource as PagedCollectionView;
foreach (var item in pgView.)
{}
我将项目作为实体获取,我无法弄清楚如何将其转换为有意义的数据 有人可以帮我吗?
如果我使用:
IEnumerable list = dataGrid.ItemsSource as IEnumerable;
foreach (var row in list)
{}
我得到了同样的实体和同样的问题...
我看了下面的任务完成了任务,但我觉得我是 将数据与演示文稿混合
PagedCollectionView pgView = verkefniDataGrid.ItemsSource as PagedCollectionView;
foreach (var item in pgView)
{
((CheckBox)verkefniDataGrid.CurrentColumn.GetCellContent(item)).IsChecked = true;
}
有没有办法获取项目背后的数据并将其设置为true?
答案 0 :(得分:1)
如果要检查复选框控件,则需要iterate through the DataGrid's rows,而不是通过绑定的项目。您需要循环遍历行,然后抓住正确列中的复选框并在其上设置属性。
但正如评论中所提到的,如果复选框绑定到网格后面的数据中的属性,那么您应该只能更改该值(只要该项公开INotifyPropertyChanged接口)。
修改更新了链接
答案 1 :(得分:0)
使用ViewModel方法,您可以像这样定义视图
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel Orientation="Vertical">
<sdk:DataGrid AutoGenerateColumns="False" Height="151" HorizontalAlignment="Left" Margin="52,67,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="190"
ItemsSource="{Binding Items}">
<sdk:DataGrid.Columns>
<sdk:DataGridCheckBoxColumn Binding="{Binding IsSelected}"/>
<sdk:DataGridTextColumn Binding="{Binding Name}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<Button Content="What is selected?" Width="300" Click="Button_Click"/>
</StackPanel>
</Grid>
然后,设置要绑定ViewModel的视图,ViewModel包含PagedCollectionView的属性:
public class ViewModel
{
private PagedCollectionView _items = new PagedCollectionView(
new[]
{new MyItem{Name="Item 1"},
new MyItem{Name="Item 2"},
new MyItem{Name="Item 3"},
new MyItem{Name="Item 4"} });
public PagedCollectionView Items
{
get { return _items; }
}
public string GetSelectedItems()
{
return "Selected items: " +
string.Join(",",
Items.Cast<MyItem>().Where(x => x.IsSelected).
Select(x => x.Name));
}
}
现在,由于我不太了解您的解决方案,因此我在代码隐藏中添加了一段丑陋的代码,以显示如何跟踪选择:
private void Button_Click(object sender, RoutedEventArgs e)
{
var viewModel = DataContext as ViewModel;
MessageBox.Show(viewModel.GetSelectedItems());
}
通过创建视图,视图模型,然后将它们与视图的DataContext属性一起拼接,将View和ViewModel连接在一起。 像这样:
var view = new MyWindow();
var viewModel = new ViewModel();
view.DataContext = viewModel;
这应该使示例有效。