Hi
Okay, I have an my ListBox bound to an observablecollection(of IGeneric) called Rules. Currently there are two type of rules.
So I have two datatemplates defined for those two types of rules. so each listboxitem uses the correct datatemplate
each datatemplate has a combobox bound to a an observablecollection(Of IRule) called Operators
Rule1) can display the following {"=", ">", "<", "<>","Between"}
Rule2) can display the following {"=", ">", "<", "<>"}
I want to filter the combobox and remove "Between" when listboxitem is displaying rule2????
I tried using ICollectionView.Filter,
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:SandBox" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:assets="clr-namespace:SandBox.Assets" Title="MainWindow" Height="350" Width="800"><Window.Resources><DataTemplate DataType="{x:Type local:FieldRule}"><GroupBox Header="Field Rule"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><assets:ColumnDefinitionExtended Width="1*" Visible="False"></assets:ColumnDefinitionExtended><assets:ColumnDefinitionExtended Width="1*" Visible="False"></assets:ColumnDefinitionExtended><ColumnDefinition Width="50"></ColumnDefinition></Grid.ColumnDefinitions><ComboBox Grid.Column="0" Margin="3" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=Concatenations}" SelectedValue="{Binding Concatenation}" DisplayMemberPath="Text"/><ComboBox Grid.Column="1" Margin="3" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=Fields}" SelectedValue="{Binding Field}" DisplayMemberPath="Text"/><ComboBox Grid.Column="2" Margin="3" SelectionChanged="ComboBox_SelectionChanged" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=Operators}" SelectedValue="{Binding Operation}" DisplayMemberPath="Text"/><TextBox Grid.Column="3" Margin="3"/><ComboBox Grid.Column="4" Margin="3" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=Concatenations}" SelectedValue="{Binding Operation1}" DisplayMemberPath="Text"/><TextBox Grid.Column="5" Margin="3"/><Button Content="Delete" Grid.Column="6" Click="Button_Click"/></Grid></GroupBox></DataTemplate><DataTemplate DataType="{x:Type local:StandardRule}"><GroupBox Header="Standard Rule"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="1*"></ColumnDefinition><ColumnDefinition Width="50"></ColumnDefinition></Grid.ColumnDefinitions><ComboBox Grid.Column="0" Margin="3" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=Concatenations}" SelectedValue="{Binding Concatenation}" DisplayMemberPath="Text"/><ComboBox Grid.Column="1" Margin="3" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=HeaderItems}" SelectedValue="{Binding Field}" DisplayMemberPath="Text"/><ComboBox Grid.Column="2" Margin="3" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=Operators}" SelectedValue="{Binding Operation}" DisplayMemberPath="Text"/><ComboBox Grid.Column="3" Margin="3" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ConfigOptions}" SelectedValue="{Binding Operand}" DisplayMemberPath="Text"/><!--<ComboBox Grid.Column="4" Text="{Binding LastName}" Margin="3"/>--><Button Content="Delete" Grid.Column="6" Click="Button_Click"/></Grid></GroupBox></DataTemplate></Window.Resources><Grid><DockPanel ScrollViewer.CanContentScroll="True"><ItemsControl ItemsSource="{Binding Rules}" Name="MyItemsControl" DockPanel.Dock="Top"></ItemsControl><telerik:RadDropDownButton Content="Add" Height="23" Name="RadDropDownButton1" Width="75" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Right"><telerik:RadDropDownButton.DropDownContent><StackPanel><TextBlock Width="125" Text="Field Rule" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/><TextBlock Width="125" Text="Standard Rule" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/></StackPanel></telerik:RadDropDownButton.DropDownContent></telerik:RadDropDownButton></DockPanel></Grid></Window>
Imports System.Collections.ObjectModel Class MainWindow Private mRules As ObservableCollection(Of IGeneric) Private mConcatenations As ObservableCollection(Of IRule) Private mFields As ObservableCollection(Of IRule) Private mOperators As ObservableCollection(Of IRule) Private mHeaderItems As ObservableCollection(Of IRule) Private mConfigOptions As ObservableCollection(Of IRule) Public Property Rules() As ObservableCollection(Of IGeneric) Get Return mRules End Get Set(ByVal value As ObservableCollection(Of IGeneric)) mRules = value End Set End Property Public Property Concatenations() As ObservableCollection(Of IRule) Get Return mConcatenations End Get Set(value As ObservableCollection(Of IRule)) mConcatenations = value End Set End Property Public Property Fields() As ObservableCollection(Of IRule) Get Return mFields End Get Set(value As ObservableCollection(Of IRule)) mFields = value End Set End Property Public Property Operators As ObservableCollection(Of IRule) Get Return mOperators End Get Set(value As ObservableCollection(Of IRule)) mOperators = value End Set End Property Public Property HeaderItems As ObservableCollection(Of IRule) Get Return mHeaderItems End Get Set(value As ObservableCollection(Of IRule)) mHeaderItems = value End Set End Property Public Property ConfigOptions As ObservableCollection(Of IRule) Get Return mConfigOptions End Get Set(value As ObservableCollection(Of IRule)) mConfigOptions = value End Set End Property Public Sub New() InitializeComponent() mConcatenations = New ObservableCollection(Of IRule) mConcatenations.Add(New Concatenation() With {.Text = "AND"}) mConcatenations.Add(New Concatenation() With {.Text = "OR"}) mFields = New ObservableCollection(Of IRule) mFields.Add(New Field() With {.Text = "Size X"}) mFields.Add(New Field() With {.Text = "Size Y"}) mFields.Add(New Field() With {.Text = "Size Z"}) mOperators = New ObservableCollection(Of IRule) mOperators.Add(New Operation() With {.Text = "="}) mOperators.Add(New Operation() With {.Text = ">"}) mOperators.Add(New Operation() With {.Text = "<"}) mOperators.Add(New Operation() With {.Text = "<>"}) mOperators.Add(New Operation() With {.Text = "Between"}) mHeaderItems = New ObservableCollection(Of IRule) mHeaderItems.Add(New HeaderItem() With {.Text = "Color"}) mConfigOptions = New ObservableCollection(Of IRule) mConfigOptions.Add(New ConfigOption() With {.Text = "AllColors"}) mRules = New ObservableCollection(Of IGeneric) mRules.Add(New FieldRule()) mRules.Add(New StandardRule()) DataContext = Me End Sub Private Sub TextBlock_MouseLeftButtonDown(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) If e.Source.Text = "Field Rule" Then mRules.Add(New FieldRule()) Else mRules.Add(New StandardRule()) End If End Sub Private Sub ComboBox_SelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs) If e.AddedItems.Count > 0 Then Dim _grid As Grid = Assets.GenericTools.FindAncestorOrSelf(Of Grid)(sender) Dim _irule As IRule = TryCast(e.AddedItems.Item(0), IRule) If _irule IsNot Nothing Then If _irule.Text = "Between" Then DirectCast(_grid.ColumnDefinitions(4), Assets.ColumnDefinitionExtended).Visible = True DirectCast(_grid.ColumnDefinitions(5), Assets.ColumnDefinitionExtended).Visible = True Else DirectCast(_grid.ColumnDefinitions(4), Assets.ColumnDefinitionExtended).Visible = False DirectCast(_grid.ColumnDefinitions(5), Assets.ColumnDefinitionExtended).Visible = False End If End If End If End Sub Private Sub Button_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim i As IGeneric = sender.DataContext mRules.Remove(i) End Sub End Class Public Interface IGeneric Function ToString() As String End Interface Public Interface IRule Property Text As String End Interface Public Class FieldRule Implements IGeneric Private mConcatenation As IRule Private mField As IRule Private mOperation As IRule Private mOperand As IRule Private mOperation1 As IRule Private mOperand1 As IRule Public Property Concatenation() As IRule Get Return mConcatenation End Get Set(ByVal value As IRule) mConcatenation = value End Set End Property Public Property Field() As IRule Get Return mField End Get Set(ByVal value As IRule) mField = value End Set End Property Public Property Operation() As IRule Get Return mOperation End Get Set(ByVal value As IRule) mOperation = value End Set End Property Public Property Operand() As IRule Get Return mOperand End Get Set(ByVal value As IRule) mOperand = value End Set End Property Public Property Operation1() As IRule Get Return mOperation1 End Get Set(ByVal value As IRule) mOperation1 = value End Set End Property Public Property Operand1() As IRule Get Return mOperand1 End Get Set(ByVal value As IRule) mOperand1 = value End Set End Property Public Function ToString1() As String Implements IGeneric.ToString Return String.Format("{0} {1}", mConcatenation, mField) End Function End Class Public Class StandardRule Implements IGeneric Private mConcatenation As IRule Private mField As IRule Private mOperation As IRule Private mOperand As IRule Public Property Concatenation() As IRule Get Return mConcatenation End Get Set(ByVal value As IRule) mConcatenation = value End Set End Property Public Property Field() As IRule Get Return mField End Get Set(ByVal value As IRule) mField = value End Set End Property Public Property Operation() As IRule Get Return mOperation End Get Set(ByVal value As IRule) mOperation = value End Set End Property Public Property Operand() As IRule Get Return mOperand End Get Set(ByVal value As IRule) mOperand = value End Set End Property Public Function ToString1() As String Implements IGeneric.ToString Return String.Empty End Function End Class Public Class Concatenation Implements IRule Private mText As String Public Property Text As String Implements IRule.Text Get Return mText End Get Set(value As String) mText = value End Set End Property End Class Public Class Field Implements IRule Private mText As String Public Property Text As String Implements IRule.Text Get Return mText End Get Set(value As String) mText = value End Set End Property End Class Public Class Operation Implements IRule Private mText As String Public Property Text As String Implements IRule.Text Get Return mText End Get Set(value As String) mText = value End Set End Property End Class Public Class HeaderItem Implements IRule Private mText As String Public Property Text As String Implements IRule.Text Get Return mText End Get Set(value As String) mText = value End Set End Property End Class Public Class ConfigOption Implements IRule Private mText As String Public Property Text As String Implements IRule.Text Get Return mText End Get Set(value As String) mText = value End Set End Property End Class