Hi,
Is there a possibility to detect as an event when a BreadCrumb item is expanded and then collapsed?
Thank you.
Path="{Binding Path=SelectedTreePath, Mode=TwoWay }"
<
telerik:RadBreadcrumb
x:Name
=
"breadcrumbDocumentCategory"
Header
=
"{Binding PathDocumentsTree}"
ItemsSource
=
"{Binding Path=PathDocumentsTree.ChildNodes, Mode=TwoWay}"
PathSeparator
=
"/"
TextModePath
=
"Header"
Path
=
"{Binding Path=SelectedTreePath, Mode=TwoWay }"
IsHistoryEnabled
=
"True"
>
<
telerik:RadBreadcrumb.HeaderTemplate
>
<
DataTemplate
>
<
TextBlock
Text
=
"{Binding CategoryName}"
/>
</
DataTemplate
>
</
telerik:RadBreadcrumb.HeaderTemplate
>
<
telerik:RadBreadcrumb.ItemTemplate
>
<
telerik:HierarchicalDataTemplate
ItemsSource
=
"{Binding ChildNodes}"
>
<
TextBlock
Text
=
"{Binding CategoryName}"
/>
</
telerik:HierarchicalDataTemplate
>
</
telerik:RadBreadcrumb.ItemTemplate
>
</
telerik:RadBreadcrumb
>
private
string
_selectedTreePath;
public
string
SelectedTreePath
{
get
{
_recResult =
string
.Empty;
if
(
this
.SelectedTreeNode
as
CategoryViewModel !=
null
&& PathDocumentsTree !=
null
)
{
_selectedTreePath = ContainerFromItemRecursive(
this
.SelectedTreeNode
as
CategoryViewModel, PathDocumentsTree.ChildNodes);
Breadcrumb.Path = _selectedTreePath;
}
return
_selectedTreePath;
}
set
{ _selectedTreePath = value; RaisePropertyChanged(() => SelectedTreePath); }
}
private
string
ContainerFromItemRecursive(CategoryViewModel selectedTreeNode, IEnumerable<CategoryTree> documentTree,
string
path =
null
)
{
if
(documentTree !=
null
)
{
string
mp = path;
int
n = 0;
foreach
(var item
in
documentTree)
{
mp = mp + CPathSeparator + item.CategoryName;
if
(item.CategoryId == selectedTreeNode.ID)
{
path = GetPath(mp, n) + CPathSeparator + item.CategoryName;
_recResult = CRootName + CPathSeparator + path.Replace(
"//"
, CPathSeparator);
break
;
}
else
{
ContainerFromItemRecursive(selectedTreeNode, item.ChildNodes, mp);
}
n++;
}
}
return
_recResult.Replace(
"//"
, CPathSeparator);
}
this
.explorerBreadcrumb.Path = this.explorerTree.ContainerFromItemRecursive(e.AddedItems[0]).FullPath;
I have error in when call RaisePropertyChanged(() => SelectedTreePathItem);
//Error
Ambiguous match found.
{System.Collections.ListDictionaryInternal}
at System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
at System.Type.GetProperty(String name)
at Telerik.Windows.Controls.RadBreadcrumb.GetItemChildren(Object currentItem)
at Telerik.Windows.Controls.RadBreadcrumb.FindCurrentItemRecursively(String currentPath, IEnumerable items, Object searchValue)
at Telerik.Windows.Controls.RadBreadcrumb.FindCurrentItem(Object newValue)
at Telerik.Windows.Controls.RadBreadcrumb.OnCurrentItemChanged(Object oldValue, Object newValue)
at Telerik.Windows.Controls.RadBreadcrumb.OnCurrentItemPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
at System.Windows.Data.BindingExpression.SendDataToTarget()
at System.Windows.Data.BindingExpression.SourcePropertyChanged(PropertyPathListener sender, PropertyPathChangedEventArgs args)
at System.Windows.PropertyPathListener.ReconnectPath()
at System.Windows.Data.Debugging.BindingBreakPoint.<>c__DisplayClass4.<BreakOnSharedType>b__3()
//my binding property in ViewModel
private CategoryTree _selectedTreePathItem;
public CategoryTree SelectedTreePathItem
{
get
{
_recCategoryResult = null;
if (this.SelectedTreeNode as CategoryViewModel != null && PathDocumentsTree != null)
{
_selectedTreePathItem = RecursiveTraverseTreeAndLocateItemById(this.SelectedTreeNode as CategoryViewModel, PathDocumentsTree.ChildNodes);
//if (_selectedTreePathItem != null)
// _selectedTreePathItem.ChildNodes.Clear();
}
return _selectedTreePathItem;
}
set { _selectedTreePathItem = value; RaisePropertyChanged(() => SelectedTreePathItem); }
}
// my RadBreadcrumb with CurrentItem
<
telerik:RadBreadcrumb
Header
=
"{Binding PathDocumentsTree}"
ItemsSource
=
"{Binding Path=PathDocumentsTree.ChildNodes, Mode=TwoWay}"
PathSeparator
=
"/"
TextModePath
=
"Header"
CurrentItem
=
"{Binding SelectedTreePathItem, Mode=TwoWay}"
IsHistoryEnabled
=
"True"
>
<
telerik:RadBreadcrumb.HeaderTemplate
>
<
DataTemplate
>
<
TextBlock
Text
=
"{Binding CategoryName}"
/>
</
DataTemplate
>
</
telerik:RadBreadcrumb.HeaderTemplate
>
<
telerik:RadBreadcrumb.ItemTemplate
>
<
telerik:HierarchicalDataTemplate
ItemsSource
=
"{Binding ChildNodes}"
>
<
TextBlock
Text
=
"{Binding CategoryName}"
/>
</
telerik:HierarchicalDataTemplate
>
</
telerik:RadBreadcrumb.ItemTemplate
>
</
telerik:RadBreadcrumb
>
// my function that return value
private
CategoryTree _recCategoryResult;
private
CategoryTree RecursiveTraverseTreeAndLocateItemById(CategoryViewModel selectedTreeNode, IEnumerable<CategoryTree> documentTree)
{
foreach
(var item
in
documentTree)
{
if
(item.CategoryId == selectedTreeNode.ID)
{
_recCategoryResult = item;
break
;
}
RecursiveTraverseTreeAndLocateItemById(selectedTreeNode, item.ChildNodes);
}
return
_recCategoryResult;
}
// my models
public
class
CategoryTree : FeatureCategoryTreeNode, ICategoryTree, INotifyPropertyChanged
{
private
ObservableCollection<CategoryTree> _childNodes;
public
new
ObservableCollection<CategoryTree> ChildNodes
{
get
{
return
_childNodes; }
set
{
_childNodes = value;
OnPropertyChanged(
"ChildNodes"
);
}
}
public
CategoryTree(
string
name)
{
this
.CategoryName = name;
this
.ChildNodes =
new
ObservableCollection<CategoryTree>();
}
public
CategoryTree(ICategoryTree categoryTree)
{
this
.CategoryName = categoryTree.CategoryName;
this
.ChildNodes =
new
ObservableCollection<CategoryTree>();
}
public
CategoryTree(FeatureCategory featureCategory)
{
this
.CategoryName = featureCategory.CategoryName;
this
.CategoryId = featureCategory.CategoryId;
this
.ParentId = featureCategory.ParentId;
this
.ChildNodes =
new
ObservableCollection<CategoryTree>();
}
public
CategoryTree(IFeatureCategory featureCategory)
{
this
.CategoryName = featureCategory.CategoryName;
this
.CategoryId = featureCategory.CategoryId;
this
.ParentId = featureCategory.ParentId;
this
.ChildNodes =
new
ObservableCollection<CategoryTree>();
}
public
CategoryTree()
{
}
public
event
PropertyChangedEventHandler PropertyChanged;
public
void
OnPropertyChanged(
string
propertyName)
{
if
(PropertyChanged !=
null
)
PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
public
interface
ICategoryTree
{
string
CategoryName {
get
;
set
; }
ObservableCollection<CategoryTree> ChildNodes {
get
;
set
; }
Guid CategoryId {
get
;
set
; }
Guid ParentId {
get
;
set
; }
}
.
...
I am currently displaying a Breadcrumb with the intention of showing the Parents of the currentItem. When the user clicks on the breadcrumb the dropdown displays of all Parents of the currentItem. When any of those Parents are clicked on the Hierarchical list, it changes the breadcrumb's current item to the newly selected one.
Question: Is it possible to disable any changes from the Hierarchical dropdown list, i.e. when a user clicks th dropdown nothing will happen.?
I can provide more code if necessary.
<telerik:RadBreadcrumb x:Name="explorerBreadcrumb"
Grid.Column="1" Grid.ColumnSpan="2" Margin="60,0,0,0"
Header="{Binding Root}"
HeaderMemberPath="Header"
Path="Path"
HierarchicalItemsSource="Parents"
HierarchicalMemberPath="Header"
IsIconVisible="False"
ItemsSource="{Binding Root.Parents}"
TextModePath="Path"
PathSeparator="=>"
IsHistoryEnabled="False"
IsTextSearchEnabled="False">
</telerik:RadBreadcrumb>
Hi,
We are using a RadBreadCrumb for displaying a path. However, when the BreadCrumb is embedded in a Scrollview, it no longer receives focus for typing when the BreadCrumb is clicked with the mouse. There is no cursor and typing does not have any effect.
This does work when the BreadCrumb is not embedded in a ScrollViewer.
It can easily be reproduced with the following xaml code snippet:
<
ScrollViewer
>
<
telerik:RadBreadcrumb
/>
</
ScrollViewer
>
Is this a known issue?
Thanks