【发布时间】:2011-09-06 11:18:34
【问题描述】:
我有带有嵌套(自定义)控件的自定义控件。我想从嵌套控件中获取属性并将其传递给主控件的转换器。这是我的代码:
<Button.IsEnabled>
<MultiBinding Converter="{x:Static app:MainControl.CanExcludeConverter}">
<Binding Path="PageIndex" ElementName="nav_pane"/>
<Binding Path="History" />
</MultiBinding>
</Button.IsEnabled>
第二个参数正确传递,但第一个参数没有正确传递——无论我做什么,我只得到 DependencyProperty.UnsetValue。首先,我将 PageIndex 作为带有通知程序的属性,然后我将其设为依赖属性,然后我尝试了几种设置绑定的方法——根本没有成功。
“nav_pane”是嵌套在 MainControl 中的自定义控件的名称。 PageIndex 是 NavPane 的依赖属性。
我错过了什么?
编辑
1
更长的例子。 MainControl 实际上由 NavPane 组成,仅此而已:-) 由于在 NavPane 中设置为“插槽”的依赖项属性,我可以在 NavPane 的框架(矩形)内添加新控件。所以它是这样开始的:
<UserControl x:Class="Worture.MainControl"
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"
xmlns:app="clr-namespace:Worture"
mc:Ignorable="d"
Height="Auto" Width="320"
BorderThickness="2" BorderBrush="Navy"
MouseEnter="UserControl_MouseEnter"
IsVisibleChanged="UserControl_IsVisibleChanged"
Loaded="UserControl_Loaded">
<Grid Margin="4,0,4,4">
<app:NavPane x:Name="nav_pane"
OnNavigation="UpdateNavPane">
<app:NavPane.UpperSlot>
<Button Margin="4,0,0,0">
<StackPanel Orientation="Horizontal">
<app:AutoGreyableImage Source="/Worture;component/Images/plus.png" Width="24" Height="24"/>
</StackPanel>
<Button.IsEnabled>
...
其余的在上面。
2
NavPane 中的依赖属性。
public static readonly DependencyProperty PageIndexProperty =
DependencyProperty.Register(NameOf.Get((NavPane dlg) => dlg.PageIndex),
typeof(int?),
typeof(NavPane),
new UIPropertyMetadata(null));
public int? PageIndex
{
get { return (int?)GetValue(PageIndexProperty); }
set { SetValue(PageIndexProperty, value); }
}
NameOf 是 SO 上的一个不错的类,它获取属性、字段等的名称。多亏了它,我避免了神奇的数字,并且更适合混淆。
3
我得到 UnsetValue 作为转换器的输入参数。 PageIndex 在各种场合设置(也取决于用户)。但是为了集中注意力,我(现在)将它设置为 null 作为构造函数的第一行。所以理论上我应该得到这样的论点——null(如“int?”)。
【问题讨论】:
-
您在“输出”窗口中遇到哪些绑定错误? (Debug Databindings)
-
@H.B.,无(与这些控件有关,有一些错误,但对于完全不同的窗口/控件)。
-
您能否再给我们一些您的 XAML 以显示控件的嵌套?
-
你从哪里得到这个“未设置值”?在转换器代码内部,还是作为转换器的结果?更好的是,nav_pane 上的“PageIndex”设置在什么时候?
-
@A.R. “设置”是什么意思?它是 Nullable
有时它是 null,有时它具有实际价值,但我应该得到 Nullable 而不是 DependencyProperty (类型,而且它始终是 UnsetValue)。以防万一,我也会发布这个属性。
标签: c# wpf xaml binding properties