Как я могу заставить свой код проверки выполнить элемент без привязки? - PullRequest
0 голосов
/ 13 июня 2011

Проблема: Я создаю пользовательский элемент управления, который обрабатывает преобразования данных (с помощью правила преобразования / проверки). Это работает на 100% по желанию, но проверка срабатывает только тогда, когда элемент управления привязан к чему-либо, что не всегда имеет место.

Есть ли способ принудительного подтверждения, даже если элемент управления не связан? ИЛИ есть ли способ установить в основном фиктивную привязку. (Решение должно быть выполнено в коде, чтобы конечным результатом был пользовательский элемент управления методом перетаскивания без какой-либо настройки xaml, необходимой программисту.

Заранее спасибо за любые советы.

РЕДАКТИРОВАТЬ: На самом деле этот код является следующим:

Binding TextBinding = BindingOperations.GetBinding(this, TextBox.TextProperty);
TextBinding.ValidationRules.Add(MyValidationRule);

Именно так я назначаю свое правило проверки, но оно будет работать только в том случае, если TextBinding не равен NULL. Поэтому мне нужно или фиктивная привязка для моего TextBox, или другой способ добавить правило проверки.

1 Ответ

0 голосов
/ 13 июня 2011

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

Действительно трудно быть более конкретным, чем это, без вашего точного варианта использования, но учтите следующее:

CoolUserControl.xaml.cs :

public class CoolUserControl : UserControl
{
    public static readonly DependencyProperty CoolProperty = ...;

    public string Cool
    {
        // get / set
    }
}

CoolUserControl.xaml :

<UserControl x:Name="root" ...>
    <TextBox>
        <TextBox.Text>
            <Binding Path="Cool" ElementName="root">
                <Binding.ValidationRules>
                    <!-- your rule here -->
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
</UserControl>

SomeConsumer.xaml :

<local:CoolUserControl Cool="{Binding SomePropertyOnMyViewModel}"/>
...