Установите все флажки в строках сетки данных из модели представления - PullRequest
4 голосов
/ 02 августа 2011

Я использую Caliburn Micro в качестве основы MVVM в приложении WPF. У меня есть небольшая проблема, как установить все флажки в элементе управления сеткой данных. Каждый ряд данных имеет флажок.

Я связываюсь с типом свойства DataGrid List.

Модель:

public class Bill : INotifyPropertyChanged
{

    public string CellPhoneNo
    {
        get { return _cellPhoneNo; }
        set
        {
            _cellPhoneNo = value;
            NotifyPropertyChanged("CellPhoneNo");
        }
    }

    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            NotifyPropertyChanged("IsSelected");
        }
    }

ViewModel:

    public IList<Bill> TmobileBill
    {
        get
        {
            return _tmobileBill;
        }
        set
        {
            _tmobileBill = value;
            NotifyOfPropertyChange(()=>TmobileBill);
        }
    }

Вид:

    <Controls:DataGrid  ItemsSource="{Binding Path= TmobileBill, 
                                              Mode=OneWay, 
                                              UpdateSourceTrigger=PropertyChanged}"
                        Style="{StaticResource FinalBillsView_CallsDataGrid}"
                        Grid.Row="0"
                        CanUserResizeRows="False">

        <Controls:DataGrid.RowHeaderTemplate>
            <DataTemplate>
                <Grid>
                    <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay,
                              RelativeSource={RelativeSource FindAncestor,
                              AncestorType={x:Type Controls:DataGridRow}}}"/>
                </Grid>
            </DataTemplate>
        </Controls:DataGrid.RowHeaderTemplate>

        <Controls:DataGrid.Columns>

            <Controls:DataGridTextColumn IsReadOnly="True"
                                             CellStyle="{StaticResource FinalBillsView_DataGrid_CellStyle}"
                                             Binding="{Binding Path=CellPhoneNo}"
                                             HeaderStyle="{StaticResource FinalBillsView_DataGridColHeaderStyle}"
                                             Header="Cell phone No"/>
        </Controls:DataGrid.Columns>
    </Controls:DataGrid>

В табличке данных для строки сетки данных я связываю свойство checbox со свойством IsChecked IsSelected из класса Bill.

<Controls:DataGrid.RowHeaderTemplate>
    <DataTemplate>
        <Grid>
            <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay,
                      RelativeSource={RelativeSource FindAncestor,
                      AncestorType={x:Type Controls:DataGridRow}}}"/>
        </Grid>
    </DataTemplate>
</Controls:DataGrid.RowHeaderTemplate>

Проблема в том, что я установил свойство IsSelected на true для всех элементов в списке.

            foreach (var row in TmobileBill)
            {
                row.IsSelected = true;
            }

Флажки в представлении не отмечены. В чем корень проблемы?

Спасибо.

1 Ответ

0 голосов
/ 02 августа 2011
  1. Попробуйте изменить IList<Bill> на ObservableCollection<Bill>
  2. Попробуйте использовать простую привязку <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"/>

Для целей отладки определите вместе с CheckBox следующий элемент управления, чтобы увидеть, что на самом деле связывается с RowItem:

<TextBlock Text="{Binding}"></TextBlock>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...