Итак, я создал свой собственный подкласс UserControl, называемый ChildView (я действительно не могу придумать достойное имя), который я хочу показать внутри контейнера в окне, у меня много различные типы этих UserControls и окно должны быть способны показать все из них. В элементы управления UserControl реализовали свой подкласс, как это:привязка данных к пользовательскому UserControl
<src:ChildView x:Class="(namespace).LoginView" [...]>
public partial class LoginView : ChildView
И я пытался добавить его в мое окно, как так:
<Grid x:Name="ViewHolder" Grid.Column="1" Grid.Row="1">
<src:ChildView DataContext="{Binding CurrentView}" />
</Grid>
private ChildView _currentView;
public ChildView CurrentView
{
get { return _currentView; }
set
{
if (_currentView == value)
return;
_currentView = value;
smLog.Trace("View set to {0}", value.GetType().Name);
NotifyPropertyChanged("CurrentView");
}
}
Однако это не гк. Когда я устанавливаю CurrentView, ничего не отображается в моем контейнере. На выходе нет сообщений об ошибках, которые указывают на проблему с привязкой. Другие привязки данных в окне работают. Я могу использовать мой ChildViews, указав свои классы непосредственно в XAML, то есть:
<Grid x:Name="ViewHolder" Grid.Column="1" Grid.Row="1">
<src:LoginView />
</Grid>
Я прочитал некоторые о свойствах зависимостей, но я не думаю, что я нужен здесь? Я попытался реализовать его так или иначе, но он, похоже, не помог, хотя я, вероятно, ошибся, я не мог обволакивать его ...
Так что, я думаю, мой вопрос: мне нужно свойство зависимости? Если да, то как это реализовать в этом случае? Если нет, в чем проблема?
элемента управления попробовать 'snoop'. это утилита wpf и очень полезно проверить, существует ли ваш контроль в сетке и какие именно проблемы у вас здесь. – Eugene
Согласно Snoop мой ViewHolder содержит «ChildView 2» [007], и если я проверю его свойства, то DataContext выделяется зеленым цветом и говорит "[(namespace) .LoginView] {Path = CurrentView}". IsInitialized, IsLoaded, IsVisible, IsEnabled - все верно ... Высота и ширина имеют разумные значения. – moggizx