Привязка значения пользовательского свойства зависимости Silverlight - PullRequest
0 голосов
/ 13 сентября 2010

Я установил свойство следующим образом:

        public static readonly DependencyProperty ValorRegistadoProperty = DependencyProperty.RegisterAttached(
        "ValorRegistado",
        typeof(string),
        typeof(CampoInfo), new PropertyMetadata(new PropertyChangedCallback((d, e) =>
        {
            System.Diagnostics.Debug.WriteLine("Valor mudado");
        })));
    public static void SetValorRegistado(UIElement element, string value)
    {
        if (string.IsNullOrEmpty(value.Trim()))
            throw new Exception("Por favor preencha este valor.");
        element.SetValue(ValorRegistadoProperty, value);
    }
    public static string GetValorRegistado(UIElement element)
    {
        return (string)element.GetValue(ValorRegistadoProperty);
    }

И объявил элемент управления следующим образом:

<toolkit:NumericUpDown Value="{Binding (CampoInfo.ValorRegistado), Mode=TwoWay}">

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

Как связать пользовательские свойства зависимостей?

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

То, что у вас должно работать, у меня аналогичная работа, например:

public static string GetId ( DependencyObject target )
{
    return ( ( target.GetValue( IdProperty ) ) as string );
}

public static void SetId ( DependencyObject target, string value )
{
    target.SetValue( IdProperty, value );
}

public static readonly DependencyProperty IdProperty = DependencyProperty.RegisterAttached(
    "SamplePropertyName",
    typeof( string ),
    typeof( Translatable ),
    new PropertyMetadata( IdPropertyChanged ) );

Что связано как:

<TextBlock TextWrapping="Wrap" mystuff:myclass.Id="{Binding FooBar.Id}"/>

Единственная часть вашей привязки я бы попробовал иизменение:

<toolkit:NumericUpDown Value="{Binding CampoInfo.ValorRegistado, Mode=TwoWay"/>

Я бы проверил, работает ли выражение привязки, например, возможно, вам нужно только указать ValorRegistado в приведенном выше примере.Один из способов проверки состоит в том, чтобы попробовать привязку к простому TextBlock, чтобы доказать, что значение проходит, или связать CampoInfo и увидеть показ полного имени объекта.

Другой подход к попытке связать свойство зависимостей - это имястраница, которую вы используете и используете привязку элемента, например:

В определении вашей страницы XAML:

<UserControl 
    x:Name="myPageIdentifier"
    x:Class="MyTest.MyPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" 
    d:DesignWidth="400">

....

</UserControl>

Затем выполните привязку как:

<toolkit:NumericUpDown Value="{Binding ElementName=myPageIdentifier,Path=SamplePropertyName,Mode=TwoWay"/>
0 голосов
/ 13 сентября 2010

Я реализовал свойство изменилось следующим образом:

        public static readonly DependencyProperty ValorRegistadoProperty = DependencyProperty.RegisterAttached(
        "ValorRegistado",
        typeof(string),
        typeof(CampoInfo), new PropertyMetadata(new PropertyChangedCallback((d, e) =>
        {
            UIElement uie = (UIElement)d;
            SetValorRegistado(uie, e.NewValue.ToString());
        })));

И переплет:

local:CampoInfo.ValorRegistado="{Binding RelativeSource={RelativeSource Self}, Path=Value, Mode=TwoWay}"
...