0

我这里有个小问题。我使用 RadTreeView 创建了自定义 TreeView。这一切都很好,但我遇到了一个障碍。我在 TreeView 中为 SelectedItem 设置了 DependencyProperty。我将控件嵌套在 View 中,在 TwoWay 模式下将属性绑定到 SelectedItem,但绑定属性不会更新,它始终为 null,尽管设置了 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>

这是Tree的部分代码:

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;
     }
}
4

1 回答 1

1

你的依赖属性看起来不错..除了那个Telerik.Windows.FrameworkPropertyMetadata实例。

Silverlight 不支持设置元数据选项,所以我想不出 Telerik 的实现将如何实现这一点。Telerik 有可能拥有自己的 DP 实现,甚至这种类型的属性元数据仅适用于他们的控件。

尝试改用标准 System.Windows.PropertyMetaData 类型,看看是否适合您。

于 2013-03-06T22:21:56.430 回答