Всплывающее окно не привязывается к переключателю, когда внутри 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
интерфейс и поднять уведомления об изменениях, когда свойство источника установлено.