'Представление не может быть совместно использовано более чем одним ListView' System.Windows..ListView - PullRequest
1 голос
/ 15 ноября 2010

Я пытаюсь установить View для моего ListView динамически: но я получаю исключение ' View не может быть доступно более чем одному ListView' , хотя я использую его только один раз , В любом случае, если я уже создаю экземпляр, а затем запускается DataTrigger, исключение также имеет место.

Это мой код wpf:

<ListView ItemsSource="{Binding Collection}" SelectionMode="Extended" AlternationCount="2" >
    <ListView.Style>
        <Style>
            <Setter Property="ListView.View" Value="{StaticResource MyView1}" />
            <Style.Triggers>                
                <DataTrigger Binding="{Binding Path=MyPath1}" Value="True">
                    <Setter Property="ListView.View" Value="{StaticResource MyView2}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=MyPath2}" Value="True">
                    <Setter Property="ListView.View" Value="{StaticResource MyView3}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListView.Style>
</ListView>

и это из ресурсов:

<GridView x:Key="MyView1">
    <GridViewColumn DisplayMemberBinding="{Binding Path=MyProperty}" >
        <GridViewColumnHeader Content="Text" />
    </GridViewColumn>
</GridView>
..

Ответы [ 2 ]

7 голосов
/ 15 ноября 2010

Вы можете добавить атрибут x: Shared = "False" к своим ресурсам GridView, например:

<GridView x:Key="MyView1" x:Shared="False">
    <GridViewColumn DisplayMemberBinding="{Binding Path=MyProperty}" > 
        <GridViewColumnHeader Content="Text" /> 
    </GridViewColumn> 
</GridView> 
.. 

Обновление

Загруженный пример проекта здесь

6 голосов
/ 16 ноября 2010

Используйте DynamicResource вместо StaticResource.

См. этот вопрос для полного кода.

...