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