Выбранный элемент в Silverlight DataGrid - PullRequest
4 голосов
/ 18 ноября 2009

У меня есть такой XAML (silverlight 3.0),

<data:DataGrid Margin="0,20,0,0" ItemsSource="{Binding Path=Upgrades}" =
    AutoGenerateColumns="False" VerticalAlignment="Center"
    AlternatingRowBackground="AliceBlue" HorizontalAlignment="Left"
    SelectionMode="Single">
    <data:DataGrid.RowStyle>
        <Style TargetType="data:DataGridRow">
            <Setter Property="IsSelected" Value="{Binding Path=IsSelected}"/>
        </Style>
     </data:DataGrid.RowStyle>
     <data:DataGrid.Columns>
         <data:DataGridTextColumn Header="Product Version" Binding="{Binding Path=ProductVersion}"/>
         <data:DataGridTextColumn Header="Upgrade Version" Binding="{Binding Path=UpgradeVersion}"/>
         <data:DataGridTextColumn Header="Description" Binding="{Binding Path=UpgradeDescription}" Width="350"/>
         <data:DataGridTextColumn Header="Database Lock Required" Binding="{Binding Path=DatabaseLockRequired}"></data:DataGridTextColumn>
     </data:DataGrid.Columns>
 </data:DataGrid>

Так что в основном у меня есть наблюдаемый список классов модели представлений обновлений, который вы можете увидеть там со свойством 'Upgrades'. У каждого класса модели представления обновления есть свойства, с которыми он связан (например, ProductVersion и т. Д.).

Я также добавил свойство IsSelected. Я хотел связать это свойство, чтобы при выборе элемента в виде сетки он автоматически устанавливался. Похоже, в классе DataGridRow отсутствует свойство IsSelected.

Я думаю, что приведенный выше пример будет работать в WPF при использовании ListView.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2009

попробуйте добавить этот столбец в сетку данных

<data:DataGridCheckBoxColumn  Header="IsSelected" Binding="{Binding Path=IsSelected, Mode=TwoWay}"></data:DataGridCheckBoxColumn>

Затем добавьте свойство IsSelected в вашу модель представления

        private bool _IsSelected = true;
        public bool IsSelected            
        {
            get
            {
                return _IsSelected;
            }
            set
            {
                if (value != _IsSelected)
                {
                    _IsSelected = value;
                    OnPropertyChanged("IsSelected");
                }
            }

Теперь, когда вы установите флажок в таблице данных, он будет установлен в вашей ViewModel

0 голосов
/ 18 ноября 2009

Попробуйте связать со свойством SelectedItem в сетке вот это

Пример:

                <my:DataGrid Width="Auto" 
                     SelectedItem="{Binding Path=AcronymsDefinitions_SelectedItem}"
                     ItemsSource="{Binding Path=DataGridSource}"
                     VerticalContentAlignment="Stretch" 
                     HorizontalContentAlignment="Stretch" 
                     VerticalAlignment="Stretch" 
                     HorizontalAlignment="Stretch"
                     MaxColumnWidth="500"
                     Margin="0,0,0,0" 
                     Background="#FFC8C8C8" 
                     Foreground="#FF333333" 
                     VerticalGridLinesBrush="AntiqueWhite" 
                     HorizontalGridLinesBrush="AliceBlue" />
...