Hello,
I have the following issue: I have data models that keep their state in a property 'ObjectState' that is of type enum. I show a list of these data model objects in a GridView. The first column shows the ObjectState-property. To have a better appearance of this column, I use a StyleSelector to get the Style based on the ObjectState.
The Problem is, that if i scroll horizontally and the column with the style selector gets out of the view, the following column suddenly shows the type of the object instead of the bound value. If I sort the grid, then the bound values appear and everything is fine.
We use version Q3 2012.
Can you help me?
Thanks
Max
I have the following issue: I have data models that keep their state in a property 'ObjectState' that is of type enum. I show a list of these data model objects in a GridView. The first column shows the ObjectState-property. To have a better appearance of this column, I use a StyleSelector to get the Style based on the ObjectState.
The Problem is, that if i scroll horizontally and the column with the style selector gets out of the view, the following column suddenly shows the type of the object instead of the bound value. If I sort the grid, then the bound values appear and everything is fine.
We use version Q3 2012.
Can you help me?
public
enum
ObjectState
{
Unchanged = 0,
New = 1,
Updated = 2,
Deleted = 3,
}
public
class
ObjectStateStyleSelector : StyleSelector
{
public
Style UnchangedStyle {
get
;
set
; }
public
Style ChangedStyle {
get
;
set
; }
public
Style AddedStyle {
get
;
set
; }
public
Style DeletedStyle {
get
;
set
; }
public
override
System.Windows.Style SelectStyle(
object
item, System.Windows.DependencyObject container)
{
if
(item !=
null
)
{
Model model = item
as
Model;
if
(model !=
null
)
{
switch
(model.ObjectState)
{
case
ObjectState.New:
return
this
.AddedStyle;
case
ObjectState.Updated:
return
this
.ChangedStyle;
case
ObjectState.Unchanged:
return
this
.UnchangedStyle;
case
ObjectState.Deleted:
return
this
.DeletedStyle;
}
}
}
return
null
;
}
}
public
class
Model : INotifyPropertyChanged
{
private
ObjectState m_objectState;
private
int
m_id;
private
string
m_description;
public
ObjectState ObjectState
{
get
{
return
m_objectState; }
set
{
if
(m_objectState == value)
return
;
m_objectState = value;
OnNotifyPropertyChanged(
"ObjectState"
);
}
}
public
int
ID
{
get
{
return
this
.m_id; }
set
{
if
(
this
.m_id == value)
return
;
this
.m_id = value;
UpdateState();
OnNotifyPropertyChanged(
"ID"
);
}
}
public
string
Description
{
get
{
return
this
.m_description; }
set
{
if
(
this
.m_description == value)
return
;
this
.m_description = value;
UpdateState();
OnNotifyPropertyChanged(
"Description"
);
}
}
public
Model()
{
this
.ObjectState = GridProblem.ObjectState.New;
}
#region INotifyPropertyChanged Members
public
event
PropertyChangedEventHandler PropertyChanged;
private
void
OnNotifyPropertyChanged(
string
prop)
{
if
(
this
.PropertyChanged !=
null
)
{
this
.PropertyChanged(
this
,
new
PropertyChangedEventArgs(prop));
}
}
private
void
UpdateState()
{
if
(m_objectState == GridProblem.ObjectState.Unchanged)
{
m_objectState = GridProblem.ObjectState.Updated;
}
}
#endregion
}
<
Window
x:Class
=
"GridProblem.MainWindow"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
xmlns:main
=
"clr-namespace:GridProblem"
Title
=
"MainWindow"
Height
=
"350"
Width
=
"525"
>
<
Window.Resources
>
<
main:ObjectStateStyleSelector
x:Key
=
"GridColumnObjectStateStyleSelector"
>
<
main:ObjectStateStyleSelector.AddedStyle
>
<
Style
TargetType
=
"telerik:GridViewCell"
>
<
Setter
Property
=
"ContentTemplate"
>
<
Setter.Value
>
<
DataTemplate
>
<
TextBlock
Text
=
"+"
FontSize
=
"20"
FontWeight
=
"Bold"
Foreground
=
"Green"
Margin
=
"0"
HorizontalAlignment
=
"Center"
VerticalAlignment
=
"Center"
></
TextBlock
>
</
DataTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
main:ObjectStateStyleSelector.AddedStyle
>
<
main:ObjectStateStyleSelector.ChangedStyle
>
<
Style
TargetType
=
"telerik:GridViewCell"
>
<
Setter
Property
=
"ContentTemplate"
>
<
Setter.Value
>
<
DataTemplate
>
<
TextBlock
Text
=
"*"
FontSize
=
"20"
FontWeight
=
"Bold"
Foreground
=
"OrangeRed"
HorizontalAlignment
=
"Center"
VerticalAlignment
=
"Center"
></
TextBlock
>
</
DataTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
main:ObjectStateStyleSelector.ChangedStyle
>
<
main:ObjectStateStyleSelector.UnchangedStyle
>
<
Style
TargetType
=
"telerik:GridViewCell"
>
<
Setter
Property
=
"ContentTemplate"
>
<
Setter.Value
>
<
DataTemplate
>
</
DataTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
main:ObjectStateStyleSelector.UnchangedStyle
>
</
main:ObjectStateStyleSelector
>
</
Window.Resources
>
<
Grid
>
<
telerik:RadGridView
x:Name
=
"mainGrid"
ItemsSource
=
"{Binding Path=Items}"
CanUserInsertRows
=
"True"
ShowInsertRow
=
"True"
AutoGenerateColumns
=
"False"
>
<
telerik:RadGridView.Columns
>
<
telerik:GridViewDataColumn
CellStyleSelector
=
"{StaticResource GridColumnObjectStateStyleSelector}"
DataMemberBinding
=
"{Binding Path=ObjectState}"
/>
<
telerik:GridViewDataColumn
Header
=
"ID"
DataMemberBinding
=
"{Binding Path=ID}"
></
telerik:GridViewDataColumn
>
<
telerik:GridViewDataColumn
Header
=
"Description"
DataMemberBinding
=
"{Binding Path=Description}"
></
telerik:GridViewDataColumn
>
</
telerik:RadGridView.Columns
>
</
telerik:RadGridView
>
</
Grid
>
</
Window
>
Thanks
Max