2010-12-09 50 views
1

我有一個綁定到對象的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中的值(根據Record.Enable設置每行的Row.IsEnable) 我是WPF的新手。

謝謝

回答

3

這應該工作。將此樣式放入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> 

如果沒有啓用該行綁定的記錄,這將使一行無法看到並且沒有高度。 「{綁定路徑=已啓用}」中的已啓用屬性屬於您的記錄。我不知道你是否已經有了,但你需要這樣的東西。

+0

這對我來說似乎有點危險。也許它的作品(我不是說它不會),但我會認爲行過濾器更好地隱藏行,以避免任何奇怪的邊緣情況下,如光標鍵不按預期工作 – 2012-04-03 05:08:06

3

跟進wangburger的答案。
要綁定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> 
0

注意:如果你設置一排樣式IsEnabled=false那麼該行實際上不能在所有被選擇,都不會對光標鍵跳過它。這可能是也可能不是你想要的。

如果你要專門設置IsEnabled=false(我知道你剛纔給那作爲一個例子),但仍允許該行是可選的,那麼你就需要(據我所知)設置IsEnabled=false爲每列模板。

相關問題