Я делаю простой пользовательский контроль.Например:
<UserControl x:Class="FileSelectionControl">
<StackPanel>
<Label>File path:</Label>
<TextBox
Text="{Binding Path=SelectedFile,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=l:FileSelectionControl},
Mode=TwoWay,
Converter={StaticResource fileInfoToStringConverter},
UpdateSourceTrigger=LostFocus,
ValidatesOnDataErrors=True}" />
</StackPanel>
</UserControl>
SelectedFile - это свойство (DependencyProperty), предоставляемое моим UserControl, которое содержит FileInfo для представления выбранного / указанного файла.Он предназначен для привязки к свойству модели представления.
Настройка привязки, чуть более общая:
Этот вид работает, хотя не правильно, и это делаетне чувствую себя хорошо.Свойство SelectedFile действует как реле между внутренними элементами управления и моделью представления.Было бы проще, если бы текстовое поле было привязано к одному и тому же источнику. SelectedFile был установлен в ...
Например, у меня есть один недостаток - проверка ввода.Viewmodel реализует IDataErrorInfo.Если я включаю проверку для SelectedFile, UserControl будет выделен.Но мне нужно подтверждение (уведомление) для внутреннего текстового поля.
Так, что будет хорошим способом справиться с этим?
Добавлено 2012-03-30 (пользовательуправляющая модель представления вместо пользовательских свойств):
Я думал, что пользовательский элемент управления больше похож на пользовательский элемент управления ... Что, если я реализовал CustomControl с ControlTemplate и TemplateBindings для пользовательских свойств CustomControl (во многом как в моем первоначальном подходе))?(D) Ps на контроле - путь, не так ли?Я не думаю, что связанная модель представления создаст приемлемый «интерфейс» для CustomControl.