我需要循环遍历行并检查silverlight中的数据网格中的复选框

时间:2012-03-21 20:33:43

标签: silverlight datagrid ria

您好我正在尝试遍历数据网格中的行 如果我使用:

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?

2 个答案:

答案 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;

这应该使示例有效。