0

ここで少し問題があります。RadTreeViewを使用してカスタムTreeViewを作成しました。それはすべてうまく機能しますが、私は障害に遭遇しました。TreeViewでSelectedItemのDependencyPropertyを設定しました。コントロールをビューにネストし、TwoWayモードでプロパティをSelectedItemにバインドしますが、バインドされたプロパティは更新されず、DependencyProperty値が設定されているにもかかわらず、常にnullになります。

これがツリー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 に答える