Всплывающее окно не привязывается к переключателю, когда внутри DataGrid (xceed)

Я сделал Toggle, который расширяет всплывающее окно с ListBox внутри. Это выглядит так:

<ToggleButton Name="Toggle" Height="20" Width="150" >
    <StackPanel>
        <TextBlock Text="TestListPopup"/>
        <Popup Height="200" Width="150"
                            IsOpen="{Binding ElementName=Toggle, Path=IsChecked}"
                            PlacementTarget="{Binding ElementName=Toggle}"
                            HorizontalAlignment="Left"
                            VerticalAlignment="Bottom">
            <ListBox SelectionMode="Multiple" SelectionChanged="TypeSelectionChanged" >
                <ListBoxItem Content="Test1"/>
                <ListBoxItem Content="Test2"/>
                <ListBoxItem Content="Test3"/>
            </ListBox>
        </Popup>
    </StackPanel>
</ToggleButton>

Он отлично работает, но я хочу использовать его внутри FilterRow моего Xceed DataGrid Вот:

<xcdg:DataGridControl x:Name="dataGrid"
                      ItemsSource="{Binding Source={StaticResource DataSource}}">
    <xcdg:DataGridControl.View>
        <xcdg:TableflowView>
            <xcdg:TableflowView.FixedHeaders>
                <DataTemplate>
                    <xcdg:ColumnManagerRow/>
                </DataTemplate>
                <DataTemplate>
                    <xcdg:FilterRow>
                        <xcdg:FilterCell FieldName="Name" IsEnabled="True"/>
                        <xcdg:FilterCell FieldName="Type" IsEnabled="True">
                            <!--  TestListPopup control here  -->
                        </xcdg:FilterCell>
                    </xcdg:FilterRow>
                </DataTemplate>
            </xcdg:TableflowView.FixedHeaders>
        </xcdg:TableflowView>
    </xcdg:DataGridControl.View>
    <xcdg:DataGridControl.Columns>
        <xcdg:Column FieldName="Name" Title="Name" />
        <xcdg:Column FieldName="Type" Title="Type" Width="160"/>
    </xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

Здесь, однако, всплывающее окно не будет привязываться к кнопке переключения. Нажатие на кнопку переключения ничего не делает.

Я сузил его до разрыва привязки, потому что, если вы установите IsOpen="True", он будет открыт (и не придерживается PlacementTarget), но снова; он отлично работает вне DataGrid..

Почему идеально функциональный контроль сломается, когда внутри FilterRow?

Любая помощь приветствуется!:)

1 ответ

Решение

Почему идеально функциональный контроль сломается, когда внутри FilterRow?

Поскольку ToggleButton и FilterCell не принадлежат к одной и той же области имен.

Вы можете попробовать связать, используя x:Reference:

IsOpen="{Binding Path=IsChecked, Source={x:Reference Toggle}}"

Другим вариантом будет связать IsChecked собственность ToggleButton к bool свойство модели представления, а также связать IsOpen собственность Popup к тому же исходному свойству. Убедитесь, что модель представления реализует INotifyPropertyChanged интерфейс и поднять уведомления об изменениях, когда свойство источника установлено.

Другие вопросы по тегам