2013-12-09 70 views
0

我想以編程方式更改ListView的內容或基於xaml的內容。更改wpf中的ListView內容

<Page.Resources> 
    <CollectionViewSource 
     x:Name="queuesViewSource" Source="{Binding TicketQueues}" d:Source="{Binding Groups[0].TicketQueues, Source={d:DesignData Source=/DataModel/SampleData.json, Type=data:SampleDataSource}}"/> 
    <CollectionViewSource 
     x:Name="ticketsViewSource" 
     Source="{Binding Tickets}" 
     d:Source="{Binding Tickets, Source={d:DesignData Source=/DataModel/TicketsList.json, Type=data:TicketsListDataSource}}"/> 
    <DataTemplate x:Key="queuesViewItemTemplate"> 
     <Grid Margin="6"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60"> 
       <Image Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> 
      </Border> 
      <StackPanel Grid.Column="1" Margin="10,0,0,0"> 
       <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" MaxHeight="40"/> 
       <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap"/> 
      </StackPanel> 
     </Grid> 
    </DataTemplate> 
    <DataTemplate x:Key="ticketsListViewTemplate"> 
     <Grid Margin="6"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <StackPanel Grid.Column="1" Margin="10,0,0,0"> 
       <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" MaxHeight="40"/> 
       <TextBlock Text="{Binding Due}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap"/> 
      </StackPanel> 
     </Grid> 
    </DataTemplate> 
    <local:ServiceDeskMasterViewDataTemplateSelector 
    QueuesTemplate="{StaticResource queuesViewItemTemplate}" 
    TicketListTemplate="{StaticResource ticketsListViewTemplate}" 
    x:Name="masterViewTemplateSelector" /> 
</Page.Resources> 
... 

<ListView Grid.Row="1" x:Name="masterList" ItemTemplateSelector="{StaticResource masterViewTemplateSelector}" /> 

而在後臺代碼:

構造頁:

  { 
      // Initial Data setting... 
      Binding items = new Binding(); 
      items.Source = this.Resources["queuesViewSource"]; 
      this.masterList.SetBinding(ItemsControl.ItemsSourceProperty, items); 
      this.InvalidateVisualState(); 
     } 

最後,列表視圖項選擇爲「希望」加載不同的內容的列表視圖,但它的不工作。請幫助

   if (eArgs.AddedItems.Count == 1 && eArgs.RemovedItems.Count == 1) 
      { 
       Binding items = new Binding(); 
       items.Source = this.Resources["ticketsViewSource"]; 

       this.masterList.SetBinding(ItemsControl.ItemsSourceProperty, items); 
       //this.masterList.SetBinding(ItemsControl.ItemTemplateProperty,) 
       this.masterList.ItemTemplate = masterViewTemplateSelector.TicketListTemplate; 
       //this.masterList.ApplyTemplate(); 
       this.InvalidateVisualState(); 
      } 
+0

@Blam:我在哪裏使用List? –

+0

您正確刪除我的評論 – Paparazzi

回答

0

嘗試增加像「MasterListItems」並綁定到這個屬性,而不是直接的「ticketsViewSource」或「queueViewSource」

MasterListItems = this.Resources["ticketsViewSource"]; 

Binding items = new Binding(); 
items.Mode = BindingMode.TwoWay; 
items.Source = MasterListItems; 

一個新的屬性然後,而不是創建一個新的綁定當更改內容時,只需更新ItemsSource:

MasterListItems = this.Resource["ticketsViewSource"] 
+0

嗨帕特里克。非常感謝你的回覆。不幸的是,這不起作用。 –

+0

您是否有更改通知被調用? –