2013-03-06 117 views
0

我在這裏有一個小問題。我使用RadTreeView創建了自定義TreeView。這一切都很好,但我遇到了一個障礙。我在TreeView中爲SelectedItem設置了DependencyProperty。我在View中嵌套我的控件,將屬性綁定到雙向模式下的SelectedItem,但綁定屬性不會更新,儘管設置了DependencyProperty值,但它始終爲空。綁定到DependencyProperty的屬性不會更新,儘管雙向綁定集

這裏的樹XAML:

<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> 

下面是這樣,我窩在視圖控制:

<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類型來代替,看看它是否適用於您。