在datatemplate外部On..PropertyValueChanged不运行

时间:2011-08-02 09:58:42

标签: c# silverlight windows-phone

我有一个自定义控件,它使用On(propertyname)ValueChanged从字典中读取项目并设置该控件的参数。

我还想将该控件用作独立控件,而不仅仅是数据绑定控件。

那么为什么OnPropertyValueChanged仅适用于数据集?

Dopendency属性是否仅适用于xaml,这是否意味着我必须从容器类中的属性进行绑定? (可能回答了我自己的问题)

在我的mainpage.xaml

    <local:spriteToggleButton x:Name="testButton" HorizontalAlignment="Center" Text="{Binding testString, ElementName=mainPage}" Correct="true" Margin="93,561,93,63" Grid.Row="1" Sprites="{Binding testSprites, ElementName=mainPage}" />

在mainpage.xaml.cs

    testSprites.Add("idle", idlesprite); // a dictionary of a custom sprite object
    testSprites.Add("highlighted", highlightedsprite);
    testSprites.Add("selected", selectedsprite);

    testString = "this is a test"; // this property is picked up by the binding.

当我从绑定中添加sprite时,它运行依赖属性更改了回调,但是当独立使用控件时,spriteToggleButton类中的属性不会更新

这是我的依赖属性更改回调

    private static void OnSpritesPropertyValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var control = d as spriteToggleButton;
        var sprites = e.NewValue as Dictionary<string, Quiz.Sprite>;

        control.idleSprite = sprites["idle"];
        control.selectedSprite = sprites["selected"];
        control.highlightedSprite = sprites["highlighted"];
    }

这是在我的spriteToggleButton

 <local:spriteView x:Name="Idle" Width="294" Height="57" HorizontalAlignment="Center" Sprite="{Binding idleSprite, ElementName=toggleSpriteControl}"  />
 ...

Sprite也是该控件中的依赖属性

1 个答案:

答案 0 :(得分:1)

我非常怀疑您没有将idleSprite类的selectedSpritehighlightedSpritespriteToggleButton实现为依赖项属性。这样做,它应该开始工作。

如果您使用spriteToggleButton来实现UserControl的价值,我会从ToggleButton派生并替换默认模板。