2014-07-24 49 views
3

我有一個WPF應用程序與DataGrid和ListView共享相同的ObservableCollection ItemsSource。當DataGrid的CanUserAddRows屬性爲True時,它會導致ListView顯示DataGrid用來添加新行的額外項目。具有相同itemssource的Datagrid和Listview

如何從DataGrid中獲取額外的行以便不在ListView中顯示?

我嘗試使用上ListView控件的DataTemplate中的觸發器和檢查,如果項目編號爲空或0

`<ListView.ItemTemplate> 
       <DataTemplate> 
        <Label Margin="-2,0,0,0" Name="CategoryLabel" > 
         <TextBlock TextWrapping="Wrap" Text="{Binding categoryName}" Height="46"></TextBlock> 
        </Label> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding categoryId}" Value="0" > <!-- also tried Value="" --> 
          <Setter TargetName="CategoryLabel" Property="Visibility" Value="Hidden" /> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </ListView.ItemTemplate>` 
+3

只是一些指針:創建的ListCollectionView(它的來源是你的ObservableCollection)與'ListCollectionView.Filter'回調,並將其分配到'ListBox.ItemsSource'財產。在過濾器回調,然後檢查由DataGrid添加的佔位符項... – elgonzo

+0

我第二@elgonzo似乎是正確的方法。 –

回答

1

我剛剛發佈了一個答案,使用一個數據模板選擇

更改模板的問題

Change View with its ViewModel based on a ViewModel Property

可能只是因爲我最近在看這個,但我想知道是否有可能在這裏使用相同的技術。

對於類別具有值的位置有一個模板,對於沒有類別的值則使用另一個空白模板。重要的是你在代碼而不是XAML中進行測試,因此更容易檢查。

1

您可以解決您的問題,而無需對您的ViewModel或代碼進行任何修改。沒有明確定義任何類型的CollectionView,你都可以做得很好。只需在ViewView的Items集合的默認視圖的NewItemPlaceholder項上再添加一個(或者只有)DataTrigger即可。有此觸發器將UIElement.Visibility附加屬性設置爲「隱藏」。將它放在ItemContainerStyle樣式觸發器中。就像這樣:

<ListView 
    ItemsSource="{Binding ...}" 
> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
     ... 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding}" 
         Value="{x:Static CollectionView.NewItemPlaceholder}"> 
        <Setter Property="UIElement.Visibility" Value="Hidden"/> 
       </DataTrigger> 
      </Style.Triggers> 
      <Setter Property="..." Value="{Binding ...}" /> 
      ... 
      <Setter Property="ContentTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <Label Margin="..." Name="..."> 
          <TextBlock TextWrapping="Wrap" 
           Text="{Binding ...}" /> 
         </Label> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 
相關問題