2017-03-02 87 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