2011-01-18 15 views
1

私は最後の時間のために、この上で私の頭を叩いてきた...シルバー、(ContentControlには?)

私は「DayItem」と呼ばれるユーザーコントロールを持っている、と私はしたいです別のUserControlで「DayPanel」と表示されます。 これはMVVMスタイルで行われていることを言及しておきますが、私は経験しているだけです。

DayPanelモデルにあり、Xamlには<ItemsPresenter />があります。

私は

this.ItemsSource = DayItems; 

をすればすべてが罰金を表示。 しかし、私はリストのようなUIのそれらのDayItemsを使用することができます...マルチ選択などをサポートするために

私はContentControlを使用して、それをObservableCollectionに設定しようとしました。 しかし、それはちょうどObservableCollectionオブジェクトのToStringテキストを示しています。 だから私はそこにDataTempleteが必要だと思います... しかし、なぜ私はコントロールを表示するDataTempleが必要ですか? それは既にそれ自身のXamlで書かれています。私はそれを繰り返すことをやり直したくありません。

または多分私は完全に間違っている、とにかく私は助けを必要とします。x

編集:

私は、データ型が必要かさえ不可能だったものを言って、仕事にこれを得ました。 のコードの中で、リストボックスに、ItemSourceがObservableCollectionであることを伝えました。

今私は他の問題... ListBoxの関連に走ってきました... レイアウト を台無しにしても、私は複数の項目を選択する方法を把握する必要があり、リストボックス内の各コントロールの間にギャップがありますそう脂肪...助けを

感謝をドラッグ

+0

ContentControlに==は__1__要素を保持しています。明らかに正しい選択はここではありません。 ContentControlをItemPlateとして使用できます。 –

答えて

2

まず、DayItemユーザーコントロールのビューモデルが必要です。それをDayItemViewModelと呼ぶことができます。また、DayPanelには、DayPanelViewModelのようなビューモデルもあります。あなたのDayPanel.xamlで、その後

public class DayPanelViewModel 
{ 
    public ObservableCollection<DayItemViewModel> DayItems { get; set; } 
} 

:次に、あなたDayPanelViewModelはDayItemViewModelインスタンスのコレクションを公開します

<UserControl x:Class="DayPanel" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <UserControl.Resources> 
     <DataTemplate x:Key="DayItemTemplate" 
         DataType="{x:Type my:DayItemViewModel}"> 
      <my:DayItem /> 
     </DataTemplate> 
    </UserControl.Resources> 
    <Grid> 
     <ListBox ItemsSource="{Binding DayItems}" 
       ItemTemplate="{StaticResource DayItemTemplate}" /> 
    </Grid> 
</UserControl> 
+0

簡潔にするために、私はMVVM でこれをやっていないので、リストボックスを作成してoberservableListにバインドし、DataTemplateを作成しようとしましたが、奇妙なエラーが発生します: プロパティ 'DataType' XML名前空間 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'の 'DataTemplate'型に存在しません。 – Notter

+0

それは本当に変です。 XAMLを確認してください。 MVVMを最初から完全に実装することをお勧めします。 –

+1

存在しなかったDayaTypeプロパティを使用せずに動作するようにしました。これは必須ではないと思います。とにかく、追加する必要がある場合は質問を更新しました:) – Notter

0

によってそれが複数選択を実装しているので、リストボックスを使用してみてください... また、それはあなたがDayItemsが含まれていない場合(MVVMのために)賢明ではなく、DayItemModel年代のかもしれませんあなたのDayPanelModelを設定し、各DayItemModelをDayItemで表示するようにListBoxのItemTemplateを設定します。