This question is locked. New answers and comments are not allowed.
Hi.
I am trying to have a listbox with many listboxes.
Detailing:
I have a "Parent" class with visibility property that performs on a sublist of "childs".
This means that I have a header item for each listbox with a checkbox binded to visiblity property.
If checked then sublist (listbox) is visible else not.
Also when I select an item on parents, his first child is selected.
When iterating with cursor I want to go between childs and collapsed parents.
I am doing a lab with it but binding with child is not being triggered....
XAML:
codeBehind:
Datasource:
Am I doing something wrong or can't I achieve binding to subitem this way?
Thanks in advance
I am trying to have a listbox with many listboxes.
Detailing:
I have a "Parent" class with visibility property that performs on a sublist of "childs".
This means that I have a header item for each listbox with a checkbox binded to visiblity property.
If checked then sublist (listbox) is visible else not.
Also when I select an item on parents, his first child is selected.
When iterating with cursor I want to go between childs and collapsed parents.
I am doing a lab with it but binding with child is not being triggered....
XAML:
<
UserControl
x:Class
=
"CollecttionBinding.CollectionListView"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
xmlns:local
=
"clr-namespace:CollecttionBinding"
mc:Ignorable
=
"d"
d:DesignHeight
=
"300"
d:DesignWidth
=
"400"
>
<
UserControl.Resources
>
<
DataTemplate
x:Key
=
"ChildTemplate"
>
<
StackPanel
>
<
TextBlock
Text
=
"{Binding Path=Designation}"
></
TextBlock
>
</
StackPanel
>
</
DataTemplate
>
<
local:BoolToVisibility
x:Key
=
"boolToVisibility"
/>
<
DataTemplate
x:Key
=
"parentTemplate"
>
<
StackPanel
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
CheckBox
IsTabStop
=
"False"
IsChecked
=
"{Binding Path=IsVisible, Mode=TwoWay, Converter={StaticResource Emty}}"
></
CheckBox
>
<
TextBlock
Text
=
"{Binding Path=Designation}"
></
TextBlock
>
</
StackPanel
>
<
telerik:RadListBox
IsTabStop
=
"True"
ItemsSource
=
"{Binding Path=Childs}"
SelectedItem
=
"{Binding Path=SelectedC, Mode=TwoWay, Converter={StaticResource Emty}}"
ItemTemplate
=
"{StaticResource ChildTemplate}"
Visibility
=
"{Binding Path=IsVisible, Mode=TwoWay, Converter={StaticResource boolToVisibility}}"
>
</
telerik:RadListBox
>
</
StackPanel
>
</
DataTemplate
>
</
UserControl.Resources
>
<
Grid
x:Name
=
"LayoutRoot"
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"*"
/>
<
ColumnDefinition
Width
=
"Auto"
/>
</
Grid.ColumnDefinitions
>
<
telerik:RadListBox
Grid.Column
=
"1"
ItemsSource
=
"{Binding Path=Parents}"
SelectedItem
=
"{Binding Path=SelectedP, Mode=TwoWay}"
ItemTemplate
=
"{StaticResource parentTemplate}"
></
telerik:RadListBox
>
</
Grid
>
</
UserControl
>
codeBehind:
public
partial
class
CollectionListView : UserControl, INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public
event
PropertyChangedEventHandler PropertyChanged;
protected
void
OnPropertyChanged(
string
propertyName)
{
if
(
this
.PropertyChanged !=
null
)
{
this
.PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
#endregion
private
ObservableCollection<Parent> _parents;
public
ObservableCollection<Parent> Parents
{
get
{
return
_parents; }
set
{
if
(_parents != value)
{
_parents = value;
OnPropertyChanged(
"Parents"
);
}
}
}
private
Parent _selectedP;
public
Parent SelectedP
{
get
{
return
_selectedP; }
set
{
if
(_selectedP != value)
{
_selectedP = value;
OnPropertyChanged(
"SelectedP"
);
SelectedC = _selectedP.Childs.FirstOrDefault();
}
}
}
private
Child _selectedC;
public
Child SelectedC
{
get
{
return
_selectedC; }
set
{
if
(_selectedC != value)
{
_selectedC = value;
OnPropertyChanged(
"SelectedC"
);
}
}
}
public
CollectionListView()
{
InitializeComponent();
this
.DataContext =
this
;
Parents =
new
Data().GetData();
}
}
Datasource:
public
class
Data
{
public
ObservableCollection<Parent> GetData()
{
return
new
ObservableCollection<Parent>()
{
new
Parent()
{
Code =
"A"
,
Designation =
"AA"
,
Childs =
new
ObservableCollection<Child>()
{
new
Child()
{
Code =
"1"
,
Designation =
"A.1"
},
new
Child()
{
Code =
"2"
,
Designation =
"A.2"
}
}
},
new
Parent()
{
Code =
"B"
,
Designation =
"BB"
,
Childs =
new
ObservableCollection<Child>()
{
new
Child()
{
Code =
"1"
,
Designation =
"B.1"
},
new
Child()
{
Code =
"2"
,
Designation =
"B.2"
},
new
Child()
{
Code =
"3"
,
Designation =
"B.3"
}
}
},
new
Parent()
{
Code =
"C"
,
Designation =
"CC"
,
Childs =
new
ObservableCollection<Child>()
{
new
Child()
{
Code =
"1"
,
Designation =
"C.1"
},
new
Child()
{
Code =
"2"
,
Designation =
"C.2"
}
}
},
new
Parent()
{
Code =
"D"
,
Designation =
"DD"
,
Childs =
new
ObservableCollection<Child>()
{
new
Child()
{
Code =
"1"
,
Designation =
"D.1"
},
new
Child()
{
Code =
"2"
,
Designation =
"D.2"
},
new
Child()
{
Code =
"3"
,
Designation =
"D.3"
}
}
}
};
}
}
public
class
Child : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public
event
PropertyChangedEventHandler PropertyChanged;
protected
void
OnPropertyChanged(
string
propertyName)
{
if
(
this
.PropertyChanged !=
null
)
{
this
.PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
#endregion
private
string
_code;
public
string
Code
{
get
{
return
_code; }
set
{
if
(_code != value)
{
_code = value;
OnPropertyChanged(
"Code"
);
}
}
}
private
string
_designation;
public
string
Designation
{
get
{
return
_designation; }
set
{
if
(_designation != value)
{
_designation = value;
OnPropertyChanged(
"Value"
);
}
}
}
}
public
class
Parent : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public
event
PropertyChangedEventHandler PropertyChanged;
protected
void
OnPropertyChanged(
string
propertyName)
{
if
(
this
.PropertyChanged !=
null
)
{
this
.PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
#endregion
public
Parent()
{
IsVisible =
true
;
}
private
string
_code;
public
string
Code
{
get
{
return
_code; }
set
{
if
(_code != value)
{
_code = value;
OnPropertyChanged(
"Code"
);
}
}
}
private
string
_designation;
public
string
Designation
{
get
{
return
_designation; }
set
{
if
(_designation != value)
{
_designation = value;
OnPropertyChanged(
"Value"
);
}
}
}
private
ObservableCollection<Child> _childs;
public
ObservableCollection<Child> Childs
{
get
{
return
_childs; }
set
{
if
(_childs != value)
{
_childs = value;
OnPropertyChanged(
"Childs"
);
}
}
}
private
bool
_isVisible;
public
bool
IsVisible
{
get
{
return
_isVisible; }
set
{
if
(_isVisible != value)
{
_isVisible = value;
OnPropertyChanged(
"IsVisible"
);
}
}
}
}
Am I doing something wrong or can't I achieve binding to subitem this way?
Thanks in advance