[英]How do I access a WPF UserControl's child control exposed as DependencyProperty?
[英]How to access a DependencyProperty of child user control in WPF/MVVM?
我有一個MainWindow.xaml
,如下所示:
<TabControl TabStripPlacement="Left">
<TabItem Header="Display Tree Data Details" HorizontalAlignment="Left">
<uControls:DisplayDataUserControl />
</TabItem>
<TabItem Header="Configuration" HorizontalAlignment="Left">
------
</TabItem>
<TabItem Header="About" HorizontalAlignment="Left">
------
</TabItem>
<TabItem Header="Sponsors" HorizontalAlignment="Left">
------
</TabItem>
</TabControl>
我的DisplayDataUserControl
使用另一個名為treeUserControl
UserControl。 我制作了treeUserControl,以便可以在WPF應用程序中的任何位置重用它。
<UserControl x:Class="WpfApplication2.DisplayDataUserControl "
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
x:Name="thisUC"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<local:treeUserControl />
<Grid>
<!-- display the details of the selected treeviewitem from "treeUserControl" here. -->
</Grid>
</Grid>
</UserControl>
treeUserControl
是一個UserControl,它通過使用DependecyPropety( SelectedItem_
)擴展TreeView
來顯示樹數據,如下所示:
<UserControl x:Class="WpfApplication2.treeUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
x:Name="thisUC"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<local:ExtendedTreeView ItemsSource="{Binding Items}"
SelectedItem_="{Binding MyTreeSelectedItem, Mode=TwoWay}">
.....
</local:ExtendedTreeView>
</Grid>
DependencyProperty定義:
public class ExtendedTreeView : TreeView
{
public ExtendedTreeView() : base()
{
this.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(___ICH);
}
void ___ICH(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (SelectedItem != null)
{
SetValue(SelectedItem_Property, SelectedItem);
}
}
public object SelectedItem_
{
get { return (object)GetValue(SelectedItem_Property); }
set { SetValue(SelectedItem_Property, value); }
}
public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register("SelectedItem_", typeof(object), typeof(ExtendedTreeView), new UIPropertyMetadata(null));
}
我可以在DisplayDataUserControl
訪問treeUserControl的MyTreeSelectedItem
視圖模型屬性,以便它可以顯示有關所選樹視圖項目的詳細信息嗎?
您的綁定層次結構看起來不正確。
您現在看起來像什么
<TabControl>
<TabItem>
<TreeUserControl>
<ExtendedTreeView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
</TreeUserControl>
</TabItem>
...
</TabControl>
您應該擁有的是這樣的東西:
<TabControl ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">
<TabItem> <!-- DataContext is SelectedItem -->
<TreeUserControl> <!-- DataContext is SelectedItem -->
<ExtendedTreeView /> <!-- DataContext is SelectedItem -->
</TreeUserControl>
</TabItem>
...
</TabControl>
在第二個例子中, .DataContext
您的TabItem,TreeUserControl,並ExtendedTreeView將全部SelectedItem
(這將是該項目的一個Items
集合)的,因為這樣的DataContext的是默認情況下從父對象繼承 。
我知道您在ExtendedTreeView
使用了Items
,而在TabControl
使用了它,但是在不知道應用程序正確結構的情況下,我無法為您提供任何建議。 希望這可以使您知道自己在做什么錯,但是您可以糾正它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.