За пределами таблицы данных On ..PropertyValueChanged не запускается - PullRequest
1 голос
/ 02 августа 2011

У меня есть пользовательский элемент управления, который использует On (propertyname) ValueChanged для чтения элементов из словаря и настройки параметров для этого элемента управления.

Я также хотел бы использовать этот элемент управления в качестве отдельного элемента, а не просто элемента управления с привязкой к данным.

Так почему же OnPropertyValueChanged работает только в наборе данных?

Есть ли свойства зависимостиработает только из xaml, значит ли это, что мне придется связывать со свойствами в классе контейнера?(возможно, ответил на мой собственный вопрос)

на моей главной странице.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}" />

на главной странице.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.

, когда я добавляю спрайты из привязкион запускает обратный вызов измененного свойства зависимостей, но свойства внутри класса 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 Ответ

1 голос
/ 02 августа 2011

Я очень подозреваю, что вы не реализовали idleSprite, selectedSprite и highlightedSprite класса spriteToggleButton в качестве свойств зависимостей. Сделайте это, и оно должно начать работать.

Что бы это ни значило, вы реализуете spriteToggleButton, используя UserControl, я бы вместо этого получил от ToggleButton и заменил шаблон по умолчанию.

...