当在 DataGrid 中时,Popup 不绑定到 Toggle (xceed)

Popup doesn't bind to Toggle when inside DataGrid (xceed)

我制作了一个 Toggle,它扩展了一个 Popup window,里面有一个 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>

它工作得很好,但我想在我的 xceed DataGridFilterRow 中使用它:

<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 中就会中断?

感谢任何帮助! :)

Why does a perfectly functional control break once put inside the FilterRow?

因为 ToggleButtonFilterCell 不属于同一个 namescope

您可以尝试使用 x:Reference:

进行绑定
IsOpen="{Binding Path=IsChecked, Source={x:Reference Toggle}}"

另一种选择是将 ToggleButtonIsChecked 属性 绑定到视图模型的 bool 属性 并绑定IsOpen 属性 的 Popup 同源 属性。确保视图模型实现 INotifyPropertyChanged 接口并在设置源 属性 时发出更改通知。