Установить свойства строки для сетки данных с привязкой к данным - PullRequest
1 голос
/ 09 декабря 2010

У меня есть DataGrid, привязанный к объекту (используя шаблон MVVM).

<DataGrid ItemsSource="{Binding Path=RecordSet}"
          AutoGenerateColumns="False"
          IsReadOnly="True"
          Name="ResultGrid">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" Width="Auto"/>
        <DataGridTextColumn Header="Foo" Binding="{Binding Path=Foo}" Width="*"/>
    </DataGrid.Columns>
</DataGrid>

Здесь:

RecordSet is a List<Record>.

Это отлично работает. Данные загружаются нормально и все. Я хотел знать, можно ли было установить некоторые свойства для отдельных строк, то есть связать свойство строки со значением в моей ViewModel (установить Row.IsEnable каждой строки на основе Record.Enable) Я новичок в WPF.

Спасибо

Ответы [ 3 ]

3 голосов
/ 09 декабря 2010

Чтобы продолжить ответ Вангбургера.
Чтобы связать свойство IsEnabled для каждого объекта DataGridRow со значением «Включено в записи», вы можете сделать это

<DataGrid ItemsSource="{Binding Path=RecordSet}" 
          AutoGenerateColumns="False" 
          IsReadOnly="True" 
          Name="ResultGrid"> 
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <Setter Property="IsEnabled" Value="{Binding Enabled}"/>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns> 
        <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" Width="Auto"/> 
        <DataGridTextColumn Header="Foo" Binding="{Binding Path=Foo}" Width="*"/> 
    </DataGrid.Columns> 
</DataGrid> 
3 голосов
/ 09 декабря 2010

Это должно работать. Поместите этот стиль в вашу DataGrid.

<DataGrid.RowStyle>                
            <Style TargetType="DataGridRow">       
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Enabled}"  Value="false">
                        <Setter Property="Visibility" Value="Hidden"/>
                        <Setter Property="Height" Value="0"/>
                    </DataTrigger>                        
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>

Это сделает строку невидимой и не будет иметь высоты, если запись, ограничивающая эту строку, не включена. Свойство Enabled в "{Binding Path = Enabled}" принадлежит вашей записи. Я не знаю, есть ли у вас это уже, но вам нужно что-то подобное.

0 голосов
/ 03 апреля 2012

Примечание: если вы установите стиль строки на IsEnabled=false, тогда эту строку вообще нельзя будет выбрать, и клавиши курсора не будут пропускать ее. Это может или не может быть то, что вы хотите.

, если вы хотите специально установить IsEnabled=false (и я понимаю, что вы только что привели это в качестве примера), но все же разрешите выбор строки, тогда вам нужно (AFAIK) установить IsEnabled=false для каждого шаблона столбца .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...