WP8将自定义Button的DependencyProperty绑定到UserControl的另一个DependencyProperty不起作用

时间:2014-01-17 04:49:15

标签: c# windows-phone-7 data-binding windows-phone-8

假设我有两个UserControl:uc1uc2uc1源自Buttonuc2源自UserControl

uc1有一个DependencyProperty isTextShow

C#:

public static readonly DependencyProperty isTextShowProperty = DependencyProperty.Register(
    "isTextShow", 
    typeof(bool), 
    typeof(uc1),
    new PropertyMetadata(true));

public bool isTextShow
{
    get { return (bool)GetValue(isTextShowProperty ); }
    set { SetValue(isTextShowProperty , value); } 
}

XAML:

<Button x:Class="xx.xx.uc1"
    ....
    x:Name="ButtonBase">

    <TextBlock 
        ..
        Visibility="{Binding ElementName=ButtonBase, Path=isTextShow, Converter="{StaticResource BoolToVisibilityConverter}"}">
    </TextBlock>
    ....     
</Button>

uc2有一个DependencyProperty isWhatEver

C#:

public static readonly DependencyProperty isWhatEverProperty = DependencyProperty.Register(
    "isWhatEver", 
    typeof(bool), 
    typeof(uc2),
    new PropertyMetadata(true));

public bool isWhatEver
{
    get { return (bool)GetValue(isWhatEverProperty ); }
    set { SetValue(isWhatEverProperty , value); } 
}

XAML:

<UserControl x:Class="xx.xx.uc2"
    ....
    x:Name="UCBase">

    <uc1
        ..
        isTextShow="{Binding ElementName=UCBase, Path=isWhatEver}">
    </uc1>
    ....     

现在我在以下某些地方使用uc2

<uc2 
    ....
    isWhatEver="False"
/>

我预测在此之后,TextBlock中的uc1将无法显示,但结果是仍然可见。
我在一些重要的地方做了断点,发现isWhatEver变成了假,但isTextShow的{​​{1}}仍然是真的。这个绑定似乎有问题。

此外,我更改了这一行:

uc1

isTextShow="{Binding ElementName=UCBase, Path=isWhatEver}" 

这一次,isTextShow="False", 中的TextBlock没有显示出来。所以这意味着第一层绑定工作正常,但第二层(UserControl的绑定DependencyProperty到UserControl的另一个DependencyProperty)不起作用。

我忽略了什么重要的事吗?谢谢。


更新: 我想现在我知道原因,但我仍然不知道解决方案。 原因是:uc1源自uc1;如果我将Button更改为从uc1派生,则可以正常使用!但是对于目前的情况,我真的需要让UserControl成为uc1的孩子,所以有什么想法吗?

0 个答案:

没有答案