2013-08-20 86 views
0

所以,我做了我自己的UserControl的子類,名爲ChildView(我真的不能拿出一個體面的名字),我想要顯示在一個窗口中的容器內,我有很多這些用戶控件的不同類型和窗口必須能夠顯示所有這些用戶控件。該用戶控件已經實現了我的子類,像這樣:數據綁定到自定義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"); 
    } 
} 

但是,這不是我RK。當我設置CurrentView時,我的容器中沒有顯示任何內容。輸出中沒有錯誤消息表明綁定存在問題。窗口中的其他數據綁定工作。

<Grid x:Name="ViewHolder" Grid.Column="1" Grid.Row="1"> 
     <src:LoginView /> 
</Grid> 

我讀過一些關於依賴屬性,但我不認爲我需要一個在這裏:我可以直接在XAML指定其類,即使用我的ChildViews?儘管我可能犯了一些錯誤,但我無法完全理解它......

所以我想我的問題是;我需要一個依賴屬性嗎?如果是這樣的話,我如何在這種情況下實現它?如果不是,問題是什麼?

+0

嘗試'snoop'。它是wpf實用程序,非常有用的檢查是你的控件存在於網格中,以及你在這裏有什麼問題 – Eugene

+0

根據Snoop,我的ViewHolder包含「ChildView 2」,如果我檢查它的屬性,DataContext以綠色突出顯示「[(namespace).LoginView] {Path = CurrentView}」。 IsInitialized,IsLoaded,IsVisible,IsEnabled都是真的......高度和寬度都有合理的值。 – moggizx

回答

1

更改孩子的DataContext並不重要,你試圖改變控制本身,而不是它綁定的數據。你需要做的是添加一個包含實際視圖的佔位符控件。 WPF內置了這樣的東西,看看ContentControl

更改網格所以它會containt一個ContentControl中,而不是ChildView,視圖綁定到控件的內容屬性

<Grid> 
    <ContentControl Content="{Binding CurrentView}"/> 
</Grid> 
+1

啊,你說得對。它現在有用,謝謝! – moggizx