Пользовательский элемент управления WPF DependencyProperty не привязывается к данным - PullRequest
3 голосов
/ 05 апреля 2011

У меня действительно простой пользовательский элемент управления, называемый SetSpeed:

<UserControl x:Class="AGWPFControls.SetSpeed"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             MinHeight="50" MinWidth="110">
    <Canvas>
        <Slider Name="sldSetSpeed" MinWidth="100" Canvas.Top="5" Canvas.Left="5" />
        <TextBox Name="txtSpeed" MinWidth="100" Canvas.Bottom="5" Canvas.Right="5" 
                Text="{Binding ElementName=sldSetSpeed, Path=Value}" />
    </Canvas>
</UserControl>

У него есть свойство DependencyProperty, называемое Speed:

public partial class SetSpeed : UserControl
{
    public SetSpeed()
    {
        InitializeComponent();
    }
    public static readonly DependencyProperty SpeedProperty;
    static SetSpeed()
    {
        var md = new FrameworkPropertyMetadata(0.0);
        SetSpeed.SpeedProperty = DependencyProperty.Register(
            "Speed", typeof(double), typeof(SetSpeed), md);
    }
    public double Speed
    {
        get { return (double)GetValue(SetSpeed.SpeedProperty); }
        set { SetValue(SetSpeed.SpeedProperty, value); }
    }
}

Я поместил элемент управления в окно и привязал к нему элемент (любой элемент):

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" xmlns:my="clr-namespace:AGWPFControls;assembly=AGWPFControls">
    <StackPanel>
        <my:SetSpeed Name="setSpeed1" />
        <TextBlock Text="{Binding ElementName=setSpeed1, Path=Speed}" />
    </StackPanel>
</Window>

Все просто. Впрочем, без кубиков. Когда я перемещаю ползунок, значение в TextBlock никогда не меняется. Что мне здесь не хватает?

Ответы [ 2 ]

6 голосов
/ 05 апреля 2011

Не похоже, что вы связали свой ползунок со свойством зависимости. Что-то вроде:

<UserControl x:Name="userControl" x:Class="AGWPFControls.SetSpeed"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             MinHeight="50" MinWidth="110">
    <Canvas>
        <Slider Name="sldSetSpeed" MinWidth="100" Canvas.Top="5" Canvas.Left="5"
                Value="{Binding Speed, ElementName=userControl, Mode=TwoWay}" />
        <TextBox Name="txtSpeed" MinWidth="100" Canvas.Bottom="5" Canvas.Right="5" 
                Text="{Binding ElementName=sldSetSpeed, Path=Value}" />
    </Canvas>
</UserControl>
1 голос
/ 05 апреля 2011

РЕДАКТИРОВАТЬ: Извините, смотрел на свойства слайдера. : -)

Попробуйте установить режим привязки двумя способами:

Кроме того, проверьте консоль вывода на наличие ошибок привязки. и установите точку останова на вашем методе get и посмотрите, будет ли он вызван

...