2015-04-08 2 views
0

У меня есть CollectionViewSource, связанный с ObservableCollection моего ViewModels. Затем у меня есть style на GroupItem, у которого есть expander. Я хочу иметь возможность «свернуть все» и «развернуть все» в заголовках групп, но у меня проблемы с привязкой к isExpanded на expander в ControlTemplate. У меня есть этот код:Связывание с CollectionViewSource с расширительным стилем

 <Style x:Key="GroupStyle" TargetType="{x:Type GroupItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type GroupItem}"> 
         <Expander IsExpanded="{Binding Path=**????**}" Template="{StaticResource DAExpander}"> 
          <Expander.Header> 
           <DockPanel VerticalAlignment="Center"> 
            <Image DockPanel.Dock="Left" x:Name="scItemIcon" Source="./groupIcon.ico" Height="18" Width="18"/> 
            <TextBlock DockPanel.Dock="Left" Text="{Binding Name}" VerticalAlignment="Center" Margin="4,0,6,0" /> 
           </DockPanel> 
          </Expander.Header> 
          <ItemsPresenter /> 
         </Expander> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

У меня есть свойство IsExpanded на мой взгляд модели, но я не могу понять, как получить к нему доступ. Я нашел такие примеры, как:

<Expander IsExpanded="{Binding Path=Items[0].IsExpanded}" 
<Expander IsExpanded="{Binding Path=Name.IsExpanded}" 

Ничего из этого не работает. Есть ли способ сделать это или мне нужно использовать другой подход?

Edit: более XAML, а также просматривать код модели:

  <ListBox ItemsSource="{Binding Source={StaticResource MyCVS}}" ItemTemplate="{StaticResource ItmesTemplate}" ItemContainerStyle="{StaticResource ItemChildStyle}" SelectedItem="{Binding SelectedItem}" > 
       <ListBox.GroupStyle> 
        <GroupStyle ContainerStyle="{StaticResource GroupStyle}" /> 
        <GroupStyle ContainerStyle="{StaticResource Group2Style}" /> 
       </ListBox.GroupStyle> 
      </ListBox> 



public class ItemViewModel : ViewModelBase 
    { 
     public string GroupName { get; set; } 
     public string SubGroupName{ get; set; } 
     public string ItemName { get; set; } 
     public bool IsExpanded {get; set;} 
    } 
+0

Опубликовать больше кода о ViewModel и более XAML –

+0

Дайте мне знать, если есть другой код, который вы хотели бы видеть. – user1336827

ответ

0

Я решил эту проблему без привязки путем добавления события щелчка на моем «Развернуть все» кнопку

private void expandAll_Click(object sender, EventArgs e) 
{ 
    // get each listBoxItem by index from the listBox 
    for (int i = 0; i < MyListBox.Items.Count; i++) 
    { 
     ListBoxItem item = (ListBoxItem)MyListBox.ItemContainerGenerator.ContainerFromIndex(i); 

     // find its parents expander 
     var exp = FindParent<Expander>(item); 

     if (exp != null) 
     { 
      //if its not null expand it and see if it has a parent expander 
      exp.IsExpanded = true; 
      exp = FindParent<Expander>(exp); 
      if (exp != null) 
       exp.IsExpanded = true; 
     } 

    } 
} 

Функция FindParent - это помощник, который подходит к визуальному дереву, ищущему контрольное задание, начинающееся с элемента управления, которым вы проходите.

Смежные вопросы