在wpf中更改ListView内容

时间:2013-12-09 14:50:29

标签: wpf

我想以编程方式或基于xaml的方式更改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}" />

在代码隐藏中:

Page的构造函数:

            {
            // 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();
            }

1 个答案:

答案 0 :(得分:0)

尝试添加一个新属性,如“MasterListItems”并绑定到此属性,而不是直接绑定到“ticketsViewSource”或“queueViewSource”

MasterListItems = this.Resources["ticketsViewSource"];

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

然后,不要在更改内容时创建新绑定,只需更新ItemsSource:

MasterListItems = this.Resource["ticketsViewSource"]