2013-03-06 7 views
0

여기에 약간의 문제가 있습니다. RadTreeView를 사용하여 사용자 정의 TreeView를 만들었습니다. 모두 잘 작동하지만 장애물이 있습니다. TreeView에서 SelectedItem에 대한 DependencyProperty를 설정했습니다. View에서 내 컨트롤을 중첩하고 TwoWay 모드에서 SelectedItem에 속성을 바인딩하지만 바인딩 된 속성은 업데이트되지 않습니다. DependencyProperty 값이 설정되어 있어도 항상 null입니다.TwoWay 바인딩을 설정 했는데도 DependencyProperty에 바인딩 된 속성이 업데이트되지 않습니다.

다음
<Grid xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
      xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' 
      xmlns:sdk='http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk' 
      xmlns:telerik='http://schemas.telerik.com/2008/xaml/presentation' x:Name='this' >  
     <Grid.Resources> 
      <DataTemplate x:Key='ChildTemplate'> 
       <TextBlock Text='{Binding Path=ChildPath}' Margin='5,0' /> 
      </DataTemplate> 
      <telerik:HierarchicalDataTemplate x:Key='NameTemplate' ItemsSource='{Binding ChildrenCollectionPath}' ItemTemplate='{StaticResource ChildTemplate}'> 
       <TextBlock Text='{Binding Path=ParentPath }' Padding='7'/> 
      </telerik:HierarchicalDataTemplate> 
     </Grid.Resources> 
    <telerik:RadTreeView x:Name='rtvTreeView' Padding='5' BorderThickness='0' IsEditable='False' IsLineEnabled='True' IsExpandOnDblClickEnabled='False' ItemTemplate='{StaticResource NameTemplate}' /> 
    </Grid> 

이 방법 I 둥지보기에서 컨트롤입니다 :

여기에 트리 XAML의

<windows:TreeViewReuse CollectionSource="{Binding SitesCollectionWithAddress}" ParentPath="Napis" Grid.Column="0" BorderThickness="2" SelectedItemD="{Binding SelectedSide, ElementName=this, UpdateSourceTrigger=Explicit, Mode=TwoWay}"          ChildPath="FullAddress" ChildrenCollectionPath="AdresyStrony" BorderBrush="Red" DoubleClickCommand="{Binding TreeViewDoubleClick}"> 
</windows:TreeViewReuse> 

그리고 여기 나무의 코드 부분 뒤에 :

public partial class TreeViewReuse : UserControl 
{ 
    static Telerik.Windows.FrameworkPropertyMetadata propertyMetaData = new Telerik.Windows.FrameworkPropertyMetadata(null, 
     Telerik.Windows.FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(SelectedItemChangedCallback)); 
    public object SelectedItemD 
    { 
     get { return GetValue(SelectedItemDProperty); } 
     set { SetValue(SelectedItemDProperty, value); } 
    } 
    public static readonly DependencyProperty SelectedItemDProperty = 
     DependencyProperty.Register("SelectedItemD", typeof(object), typeof(TreeViewReuse), propertyMetaData); 

    public TreeViewReuse() 
    { 
     InitializeComponent(); 

     Loaded += new RoutedEventHandler(TreeViewReuse_Loaded); 
    } 

    void treeView_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e) 
    { 
     SelectedItemD = _treeView.SelectedItem; 
    } 

    static private void SelectedItemChangedCallback(DependencyObject dp, DependencyPropertyChangedEventArgs e) 
    { 
    } 

사람이 있습니까 SelectedItemD에 바인딩 된 속성이 업데이트되지 않는 이유는 무엇입니까? 트리의 선택된 항목을 설정하는 것에 신경 쓰지 않고 선택한 항목으로 만 설정하려고합니다.

public StronaSprawy SelectedSide 
{ 
    get 
    { 
     return _selectedSide; 
    } 
    set 
    { 
     _selectedSide = value; 
    } 
} 

답변

1

귀하의 종속성 속성이 모두 Telerik.Windows.FrameworkPropertyMetadata 예를 제외하고 .. 잘 보이는 :

여기 재산입니다.

Silverlight는 메타 데이터 옵션 설정을 지원하지 않기 때문에 Telerik 구현이 어떻게 구현되는지 생각할 수 없습니다. Telerik이 자체 DP 구현을 가지고 있거나이 유형의 속성 메타 데이터가 해당 컨트롤에서만 작동 할 수도 있습니다.

표준 System.Windows.PropertyMetaData 유형을 대신 사용해보고 실제로 작동하는지 확인하십시오.