WPF привязка для конвертера не работает - PullRequest
1 голос
/ 23 сентября 2010

У меня есть пользовательский конвертер, который имеет свойство DefaultText.Все, что делает мой конвертер - возвращает DefaultText, если строка пуста или пуста.Я не могу заставить его работать, хотя.Вот что у меня есть.Это класс конвертера.

public class DisplayValueConverter : DependencyObject, IValueConverter
{
    public static readonly DependencyProperty DefaultTextProperty = DependencyProperty.Register( "DefaultText",
                                                                                                 typeof ( string ),
                                                                                                 typeof ( DisplayValueConverter ) );

    public string DefaultText
    {
        get { return ( string ) GetValue( DefaultTextProperty ); }
        set { SetValue( DefaultTextProperty, value ); }
    }

    public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
    {

        string empty = ( parameter != null ) ? parameter as string : DefaultText;
        return ( value != null && !string.IsNullOrEmpty( value.ToString().Trim() ) ) ? value.ToString() : empty;
    }

    public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
    {
        return null;
    }
}

И это мой xaml, использующий его.

        <TextBox Grid.Column="1"
                 Grid.Row="3"
                 VerticalAlignment="Center"
                 Margin="0,0,10,0" >
            <TextBox.Text>
                <Binding Path="DataSource.Payee"
                         Mode="TwoWay"
                         NotifyOnSourceUpdated="True"
                         NotifyOnTargetUpdated="True"
                         NotifyOnValidationError="True"
                         ValidatesOnDataErrors="True"
                         UpdateSourceTrigger="PropertyChanged">
                    <Binding.Converter>
                        <k:DisplayValueConverter DefaultText="{Binding ElementName=This, Path=Test, Mode=TwoWay}" />
                    </Binding.Converter>
                    <Binding.ValidationRules>
                        <vr:RequiredField Label="Payee" />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

Я проверил, что у DataContext есть объект и что Path работает,Поэтому я не уверен, что делаю не так.

Ответы [ 2 ]

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

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

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

0 голосов
/ 01 августа 2012

просто для добавления комментария к ответу # 1 - даже если конвертер будет в визуальном или логическом дереве, вы не должны предполагать, что DefaultText будет установлено до выполнения Convert(...) вконвертер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...