Как привязать данные к свойству коллекции за источником viewview? - PullRequest
0 голосов
/ 15 декабря 2008

В настоящее время у меня есть коллекция со свойством HasChanges (у каждого объекта в коллекции также есть собственное свойство HasChanges), и коллекция является источником моего CollectionViewSource.

Когда я пытаюсь привязать свойство HasChanges коллекции за CollectionViewSource к одному из моих пользовательских элементов управления, оно привязывается к свойству HasChanges выбранного в настоящий момент объекта вместо свойства HasChanges исходной коллекции CollectionViewSource. Есть ли способ, которым я могу явно указать привязке смотреть на объект коллекции, а не на объекты в коллекции?

Мой код выглядит примерно так:

<Window x:Class="CollectionEditWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Local="clr-namespace:My.Local.Namespace;assembly=My.Local.Namespace">
    <Window.Resources>
        <CollectionViewSource x:Name="CVS" x:Key="MyCollectionViewSource" />
    </Window.Resources>

<Local:MyCustomControl HasChanges="{Binding HasChanges, Source={StaticResource 
                         MyCollectionViewSource}}">
<!-- Code to set up the databinding of the custom control to the CollectionViewSource-->
</Local:MyCustomControl>
</Window>

Спасибо.

1 Ответ

2 голосов
/ 16 декабря 2008

При привязке к CollectionViewSource вы получаете CollectionView , у которого есть свойство SourceCollection , которое можно использовать для получения коллекции за CollectionViewSource, например:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Grid.Resources>
        <x:Array x:Key="data" Type="{x:Type sys:String}">
            <sys:String>a</sys:String>
            <sys:String>bb</sys:String>
            <sys:String>ccc</sys:String>
            <sys:String>dddd</sys:String>
        </x:Array>
        <CollectionViewSource x:Key="cvsData" Source="{StaticResource data}"/>
    </Grid.Resources>
    <StackPanel>
        <ListBox ItemsSource="{Binding Source={StaticResource cvsData}}"/>
        <TextBlock Text="{Binding Source={StaticResource cvsData}, Path=Length, StringFormat='{}Length bound to current String = {0}'}"/>
        <TextBlock Text="{Binding Source={StaticResource cvsData}, Path=SourceCollection.Length, StringFormat='{}Length bound to source array = {0}'}"/>
    </StackPanel>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...