У меня есть несколько полей UserControl, которые предоставляют текстовое поле внутри пользовательского элемента управления.Я ссылаюсь на UserControl как:
<UserControl
DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}" />
Я устанавливаю его на это, потому что мои UserControls находятся в модели представления, которые имеют некоторые общие команды и т. Д., Поэтому я могу связать эти свойства с моей внешней ViewModel:
Работает как нужно.Проблема в том, что каждый UserControl имеет свою собственную модель представления для отслеживания таких вещей, как свойство Value:
<UserControl
IsInDesignMode="{Binding IsInDesignMode}"
Text="{Binding Value}"
DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}" />
Если я использую:
<UserControl
IsInDesignMode="{Binding IsInDesignMode, RelativeSource={RelativeSource AncestorType=UserControl}}"
ControlText="{Binding DataContext.Value}" />
или
<UserControl
IsInDesignMode="{Binding DataContext.IsInDesignMode, RelativeSource={RelativeSource AncestorType=UserControl}}"
ControlText="{Binding DataContext.Value}"
/>
ControlText должным образом привязывается к значению viewmodel объекта UserControl, так что это кажется правильным подходом, но IsInDesignMode не будет привязываться к тому же представлению / модели представления, что и при наличии DataContext = из первой версии.