さて、私はWPFとXAMLでかなり経験がないので、どのような指針やアドバイスをいただければ幸いです。UserControlsレンダリングされていません
私は私が働いているスケジューリングプログラムを用意しています。私はセットアップの手助けが必要です。私は以前は仕事をしていたが、正しく組織されていなかった。 MainWindowの初期化時にStackPanelに追加するViewModelにUI要素がありました。 MVVMスタイルのコーディングではありません。だから私は持っているものを表示するためにいくつかのビュー(UserControls)を作成し、ほとんどすべてが壊れた。
基本的に、いくつかのパラメータと異なるRoom ViewModelsのリストを持つSchedule ViewModelがあります。各Room ViewModelには、RoomEvent ViewModelのリストを含むRoomSchedule ViewModelがあります。
私は、表示が必要なもののコントロールを記述しようとしています。私は、ルームビューのリストボックスを持つスケジュールビューを作成しました。ルームビューはRoomEventビューを使用してルームのイベントを表示します。 RoomビューはWPF Extended ToolkitのTimelinePanelを使用し、残りのコントロールはかなり基本的なコントロールです。一般的な考え方は、モデルはViewModelにデータを提供し、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>
ScheduleStart
およびScheduleEnd
は、RoomView.xaml.cで定義された依存関係プロパティです。 s。私の考えは、コンストラクタで設定されるStart
とEnd
のプロパティを持ち、ListBox
のRoomView
は、これらのプロパティにバインドしてTimelinePanelのBeginDate
とEndDate
を設定します。
'=" {Binding localcontrols:ScheduleStart} "これは完全に間違っています。実際の解決策を知るには、あまりにも多くの手を振っています。このため、問題を特定する最小限のプロトタイプを作成することは、依頼する前の最初のステップです。いずれにしても、Snoopは実行時にバインディングを調べるのに最適なツールです。実際にバインドできるものが表示されます。そこに必要なデータを取得する方法のヒントが得られます。 – Will