Мне нужно перебрать строки и установить флажок в сетке данных в Silverlight - PullRequest
2 голосов
/ 22 марта 2012

Привет. Я пытаюсь перебрать строки в сетке данных. Если я использую:

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 ]

1 голос
/ 22 марта 2012

Вам нужно перебирать строки DataGrid , а не элементы, к которым он привязан, если вы хотите установить флажок.Вам нужно было бы перебрать строки, а затем установить флажок в соответствующем столбце и установить для него свойства.

Но, как уже упоминалось в комментариях, если флажок привязан к свойству в данных засетка, то вы должны просто иметь возможность изменить это значение (если элемент предоставляет интерфейс INotifyPropertyChanged).

Редактировать Обновлена ​​ссылка

0 голосов
/ 22 марта 2012

Используя подход 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, которое содержит свойство вашего 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());
}

Соединение View и ViewModel осуществляется путем создания представления, модели представления и последующего сшивания их вместе со свойством DataContext представления. Как это:

var view = new MyWindow();
var viewModel = new ViewModel();
view.DataContext = viewModel;

Это должно заставить работать пример.

...