Проблемы со связыванием с ListViewItems - PullRequest
0 голосов
/ 09 мая 2011

У меня есть этот кусок XAML:

<Style x:Key="HideShowStyle" TargetType="{x:Type ListViewItem}">
        <Style.Resources>
            <localConverters:ShowHideConverter x:Key="showHideConverter" />
        </Style.Resources>

        <Style.Triggers>
            <DataTrigger Value="true">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource showHideConverter}">
                        <Binding Path="EndingDate" />
                        <Binding ElementName="cmbType" Path="SelectedValue" />
                        <Binding ElementName="searchBox" Path="Text" />
                        <Binding Path="Client" />
                    </MultiBinding>
                </DataTrigger.Binding>
                <Setter Property="Visibility" Value="Visible" />
            </DataTrigger>

            <DataTrigger Value="false">
                (...)
            </DataTrigger>
        </Style.Triggers>
    </Style>

, который я конвертировал в код C # в:

        var triggerStyle = new Style();
        var trueTrigger = new DataTrigger();
        var multiBinding = new MultiBinding();
        var converter = new ShowHideConverter();

        multiBinding.Converter = converter;

        var binding1 = new Binding("SelectedItem");
        binding1.Source = cmbType;
        multiBinding.Bindings.Add(binding1);

        var binding2 = new Binding("EndingDate");
        binding2.Source = reportList.ItemsSource;
        multiBinding.Bindings.Add(binding2);

        var binding3 = new Binding("Text");
        binding3.Source = searchBox;
        multiBinding.Bindings.Add(binding3);

        var binding4 = new Binding("Client");
        binding4.Source = reportList.ItemsSource;
        multiBinding.Bindings.Add(binding4);

        trueTrigger.Value = true;
        trueTrigger.Binding = multiBinding;
        trueTrigger.Setters.Add(new Setter(VisibilityProperty, Visibility.Visible));

        var falseTrigger = new DataTrigger();
        falseTrigger.Value = false;
        falseTrigger.Binding = multiBinding;
        falseTrigger.Setters.Add(new Setter(VisibilityProperty, Visibility.Collapsed));

        triggerStyle.Triggers.Add(trueTrigger);
        triggerStyle.Triggers.Add(falseTrigger);

        reportList.ItemContainerStyle = triggerStyle;

Теперь, выполняя код, просмотр списка правильно передает данные в конвертер, анализирует их и возвращает истину или ложь в зависимости от условий. Проблема заключается в том, что привязка «Клиент» не прокручивает строки, но остается привязанной к значению первого столбца, в то время как стиль XAML работает нормально.
Я понятия не имею, как это сделать, чтобы все заработало.

1 Ответ

2 голосов
/ 09 мая 2011

Просто удалите эту строку:

binding4.Source = reportList.ItemsSource;

Источником привязки будет контекст данных элемента представления списка (который является элементом данных для каждой строки).

...