2014-09-18 39 views
0

我(似乎是)在WPFWPF多列組合框用頭

組合框中

我需要用它綁定到一個ViewModel頭一個ComboBox一個相當簡單的要求,

我發現關於這個主題很多其他的問題和答案,但沒有人似乎爲我考慮以下(ninject)財產的具體要求

工作

public List<OrderBatchVm> OrderBatches 
    { 
    get 
    { 
     return _orderBatches; 
    } 

    private set 
    { 
     Set(() => OrderBatches, ref _orderBatches, value); 
    } 
    } 

而這個視圖模型

public class OrderBatchVm 
{                               
    public string Name { get; set; } 
    public DateTime Time { get; set; } 
    public string User { get; set; } 
} 

我已經想出了各種其他堆棧溢出問題

<ComboBox Width="400" Height="22" ItemsSource="{DynamicResource items}" VerticalAlignment="Center" > 
    <ComboBox.Resources> 
     <CompositeCollection x:Key="items"> 
      <ComboBoxItem IsEnabled="False"> 
       <Grid TextElement.FontWeight="Bold" Width="400"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="*"/> 
        </Grid.ColumnDefinitions> 
        <Grid.Children> 
         <TextBlock Grid.Column="0" Text="Name"/> 
         <TextBlock Grid.Column="1" Text="User"/> 
         <TextBlock Grid.Column="2" Text="Date"/> 
        </Grid.Children> 
       </Grid> 
      </ComboBoxItem> 
      <Separator/> 
      <CollectionContainer Collection="{Binding OrderBatches}"/> 
     </CompositeCollection> 

     <DataTemplate DataType="viewModel:OrderBatchVm"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition SharedSizeGroup="A"/> 
        <ColumnDefinition Width="5"/> 
        <ColumnDefinition SharedSizeGroup="B"/> 
       </Grid.ColumnDefinitions> 
       <Grid.Children> 
        <TextBlock Grid.Column="0" Text="{Binding Name}"/> 
        <TextBlock Grid.Column="1" Text="{Binding User}"/> 
        <TextBlock Grid.Column="2" Text="{Binding Time}"/> 
       </Grid.Children> 
      </Grid> 
     </DataTemplate> 
    </ComboBox.Resources> 
</ComboBox> 

上面產生的組合框的標題下面,但是數據不會被綁定到CollectionContainer

經過對這種方法的一點研究,我想我理解它最基本的嘗試做什麼,以及CollectionContainer的缺陷,儘管我不確定我試圖實現的是可能的,或者如何實現E - 這

感謝

更新

下不實際工作,但它沒有頭這是我在這種情況下

<ComboBox Width="400" Height="22" ItemsSource="{Binding OrderBatches}" VerticalAlignment="Center" > 
    <ComboBox.ItemTemplate> 
     <DataTemplate DataType="viewModel:OrderBatchVm"> 
      <Grid Width="400"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Grid.Children> 
       <TextBlock Grid.Column="0" Text="{Binding Name}"/> 
       <TextBlock Grid.Column="1" Text="{Binding User}"/> 
       <TextBlock Grid.Column="2" Text="{Binding Time}"/> 
      </Grid.Children> 
     </Grid> 
    </DataTemplate> 
     </ComboBox.ItemTemplate> 
</ComboBox> 

回答

0

你的第一個方法並不主要要求因爲您的DataContext似乎設置不正確而顯示集合。 另一方面,如果設置正確,您將看不到標題,因爲ComboBoxItem設置在xaml中,而不屬於ItemsSource。 您可以使用viewmodel數據(ItemsSource)或Xaml的定義列表定義ComboBoxItems,而不是兩者。 在你的情況下,我想你想連接到ItemsSource。

1)

我已經impemeneted顯示使用的ControlTemplate在下拉標題類似MSDN的例子(here):

只需將您的標題模板「Popup'-定義中,上述ScrollViewer(因爲你不希望標題滾動!)

2)你也可以管理它保持你的方法2,只是增強你的ItemTemplate到你的需求(例如你的viewmodel規則是:第一個collectionitem總是頭)。