2017-03-02 203 views
1

好的,首先,我對WPF和XAML不熟悉,所以任何指針或建議都將不勝感激。UserControls not rendering

我有一個調度計劃,我正在努力,我需要一些幫助設置。我以前有事情可做,但是組織不正確。我的ViewModel中有UI元素,我將在MainWindow的初始化時添加到StackPanel。一般不是MVVM風格的編碼。所以我做了一些視圖(用戶控件)來展示我擁有的東西,並且大部分內容都打破了。

基本上,我有一個Schedule ViewModel有一些參數和一個不同的Room ViewModels列表。每個Room ViewModel都有一個RoomSchedule ViewModel,其中包含RoomEvent ViewModel的列表。

我正在嘗試爲需要顯示的東西編寫控件。我創建了一個時間表視圖,其中有一個房間視圖的列表框,房間視圖使用RoomEvent視圖來顯示房間的事件。 Room視圖使用WPF Extended Toolkit的TimelinePanel,其餘的控件都是基本的控件。總體思路是:模型向ViewModel提供數據,將數據按照需要顯示的內容進行處理。因此,一個活動應該知道如何展示自己,一個活動室應該知道如何展示自己,並且該活動應該知道如何展示自己。

我遇到的問題是:現在我已經將xaml.cs或ViewModel文件中的所有內容掃描到適當的位置,控件根本不會渲染。我一直在閱讀其他SO帖子,人們都有同樣的問題,但他們似乎沒有像這樣的初學者工作。我認爲我很接近,似乎所有的控件都在創建,DataContext的設置正確,但沒有任何顯示。

這是,基本上,我到目前爲止。我留下了一些的XAML樣板東西關閉簡潔:

Schedule.xaml:

<StackPanel> 
    <ListBox ItemsSource="{Binding Rooms}" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <localcontrols:RoomView ScheduleStart="{Binding ElementName=ScheduleControl, Path=DataContext.Start}" 
      </DataTemplate> 
     <ListBox.ItemTemplate> 
    </ListBox> 
</StackPanel> 

RoomView.xaml:

<extended:TimelinePanel BeginDate="{Binding localcontrols:ScheduleStart}" EndDate="{Binding localcontrols:ScheduleEnd}" 
    <ItemsControl ItemsSource="{Binding Path=mRoomSchedule.mScheduledEvents}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <localcontrols:EventView /> 
      </DataTemplate> 
     </ItemsControls.ItemTemplate> 
    </ItemsControl> 
</extended:TimelinePanel> 

EventView.xaml:

<Border BorderThickness="1" BorderBrush="Black" extended:TimelinePanel.Date="{Binding mStartTime}" extended:TimelinePanel.DateEnd="{Binding mEndTime}"> 
    <TextBlock Background="{Binding mColor}" Text="{Binding mEventID}" /> 
</Border> 

ScheduleStartScheduleEnd是在RoomView.xaml.c中定義的依賴項屬性秒。我的想法是,時間表將具有將在其構造函數中設置的StartEnd屬性,並且ListBox中的RoomView將綁定到這些屬性以設置時間軸面板的BeginDateEndDate

+0

'=「{Binding localcontrols:ScheduleStart}」'這是完全錯誤的。你在這裏揮舞着太多的東西讓我知道實際的解決方案。這就是爲什麼創建一個能夠隔離問題的最小原型始終是提問之前的第一步。總之,注意,Snoop是在運行時檢查綁定的好工具。你會看到你實際上可以綁定什麼,這可以給你一個如何獲得你需要的數據的提示。 – Will

回答

0

也許你的綁定是錯誤的。當我需要綁定到依賴屬性時,我使用綁定的ElementName功能來說我想要哪個控件,並且給根節點一個名稱,在這種情況下爲。這是解決問題的一種方法。

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:Weingartner.Controls" 
    x:Class="RoomView" 
    x:Name="Root"> 


    <extended:TimelinePanel 
     BeginDate="{Binding ElementName=Root, Path=ScheduleStart}" 
     EndDate="{Binding ElementName=Root, Path=ScheduleEnd}" 
    > 
     <ItemsControl ItemsSource="{Binding Path=mRoomSchedule.mScheduledEvents}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <localcontrols:EventView /> 
       </DataTemplate> 
      </ItemsControls.ItemTemplate> 
     </ItemsControl> 
    </extended:TimelinePanel> 



</UserControl> 
+0

這比我在做的事情更有意義,但它沒有幫助。謝謝。 – Teravian