This question is locked. New answers and comments are not allowed.
I've set up an object with IsExpandable and IsExpanded properties. I've found that when I set the IsExpandable property to false, the expander icon does not go away, as expected.
Here's my code for the Model:
And here's the xaml for the tree list view:
In my View Model, I listen to the property changed event for each item, and if the IsExpanded flag has been set, I get the data from the database and add it to the Children collection. Here's the code for that:
My problem is that when I set tag.IsExpandable = false, the expander icon does not disappear as expected. But, if I collapse and re-expand the item's parent, the expander will then be gone, as expected. This seems like a bug to me, as I am raising a notify property changed event, but the change isn't happening right away.
P.S. With this example, if I click the left arrow on some items, an exception is thrown. If this ends up being a bug you add to PITS, can you also add the left arrow issue as well?
P.P.S. I'm running Q1 2013.
Here's my code for the Model:
public partial class Tag{ private bool _isExpanded; private bool _isExpandable; private ObservableCollection<Tag> _children; public string TagID { get; set; } public string TagName { get; set; } public bool IsExpanded { get { return _isExpanded; } set { if (_isExpanded != value) { _isExpanded = value; RaisePropertyChanged("IsExpanded"); } } } public bool IsExpandable { get { return _isExpandable; } set { if (_isExpandable != value) { _isExpandable = value; RaisePropertyChanged("IsExpandable"); } } } public ObservableCollection<Tag> Children { get { return _children; } set { _children = value; RaisePropertyChanged("Children"); } }}And here's the xaml for the tree list view:
<telerik:RadTreeListView ItemsSource="{Binding TopLevelTags}" IsExpandedBinding="{Binding IsExpanded, Mode=TwoWay}" IsExpandableBinding="{Binding IsExpandable}" CanUserFreezeColumns="False" CanUserReorderColumns="False" CanUserSortColumns="False"> <telerik:RadTreeListView.ChildTableDefinitions> <telerik:TreeListViewTableDefinition ItemsSource="{Binding Children}" /> </telerik:RadTreeListView.ChildTableDefinitions> <telerik:RadTreeListView.Columns> <telerik:GridViewDataColumn Header="TagID" DataMemberBinding="{Binding TagID}" TextAlignment="Left" ShowDistinctFilters="False" IsReadOnly="True" /> <telerik:GridViewDataColumn Header="TagName" DataMemberBinding="{Binding TagName, Mode=TwoWay}" TextAlignment="Left" ShowDistinctFilters="False" IsReadOnly="False" /> </telerik:RadTreeListView.Columns></telerik:RadTreeListView>In my View Model, I listen to the property changed event for each item, and if the IsExpanded flag has been set, I get the data from the database and add it to the Children collection. Here's the code for that:
private async void OnTagPropertyChanged(object sender, PropertyChangedEventArgs e){ if (e.PropertyName == "IsExpanded") { Tag tag = sender as Tag; if (tag == null) { return; } if (tag.IsExpanded && (tag.Children == null || !tag.Children.Any())) { IEnumerable<Tag> childTags = await Context.LoadAsync(Context.GetChildTagsQuery(tag.TagPK)); if (childTags.Any()) { tag.Children = new ObservableCollection<Tag>(); foreach (Tag t in childTags) { t.IsExpandable = true; t.IsExpanded = false; t.PropertyChanged += OnTagPropertyChanged; tag.Children.Add(t); } } else { tag.IsExpandable = false; } } }}My problem is that when I set tag.IsExpandable = false, the expander icon does not disappear as expected. But, if I collapse and re-expand the item's parent, the expander will then be gone, as expected. This seems like a bug to me, as I am raising a notify property changed event, but the change isn't happening right away.
P.S. With this example, if I click the left arrow on some items, an exception is thrown. If this ends up being a bug you add to PITS, can you also add the left arrow issue as well?
P.P.S. I'm running Q1 2013.
