powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Expander IsExpanded и DataContext
19 сообщений из 19, страница 1 из 1
Expander IsExpanded и DataContext
    #38181184
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: xml
1.
2.
3.
4.
                <Expander Style="{StaticResource MyExpander}" DataContext="{Binding Item}" MaxHeight="280" 
                          IsExpanded="{Binding Converter={StaticResource Collapsed}, Path=Collapsed, ConverterParameter=1}">
                    <ListBox ItemsSource="{Binding Item}" Style="{StaticResource StyleListSelected}" IsSynchronizedWithCurrentItem="True" />
                </Expander>



Есть множество Expander'ов и может быть развернут только один, а остальные должны сворачиваться и тут возникает проблема:
Если DataContext оставить пустым все работает нормально а если DataContext="{Binding Item}"
то перестает работать IsExpanded Binding
Как можно все это сделать чтобы и DataContext был и IsExpanded="{Binding...}" работал ?
причем такое поведение не только у Expander но и у бутонов имеющие IsChecked
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38181700
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr Vap,

RelativeSource ?
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38182418
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,
Код: xml
1.
2.
3.
4.
5.
6.
7.
                    <Expander.IsExpanded>
                        <Binding Converter="{StaticResource Collapsed}" Path="Collapsed" ConverterParameter="1">
                            <Binding.RelativeSource>
                                <RelativeSource Mode="FindAncestor" AncestorType="{x:Type Expander}" AncestorLevel="1"/>
                            </Binding.RelativeSource>
                        </Binding>
                    </Expander.IsExpanded>


чтото не выходит, поможите
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38184709
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr Vap,

Как-то так я думаю. Только вместо Grid подставьте родителя Expander.
Код: xml
1.
2.
3.
4.
<Expander Style="{StaticResource MyExpander}" DataContext="{Binding Item}" MaxHeight="280" 
                          IsExpanded="{Binding Path=DataContext.Collapsed, RelativeSource ="{RelativeSource Mode="FindAncestor", AncestorType="{x:Type Grid}" }", Converter={StaticResource Collapsed}, ConverterParameter=1}">
                    <ListBox ItemsSource="{Binding Item}" Style="{StaticResource StyleListSelected}" IsSynchronizedWithCurrentItem="True" />
</Expander>
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38184711
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лишние "" вокруг {RelativeSource ...}
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38184978
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: xml
1.
2.
3.
IsExpanded="{Binding Path=Collapsed, RelativeSource ={RelativeSource Mode= FindAncestor, AncestorType={x:Type Expander}}, Converter={StaticResource Collapsed}, ConverterParameter=1}"

IsExpanded="{Binding Path=DataContext.Collapsed, RelativeSource ={RelativeSource Mode= FindAncestor, AncestorType={x:Type Expander}}, Converter={StaticResource Collapsed}, ConverterParameter=1}"



всеравно не выходит может еще какие способы есть?
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185045
Фотография pitachek69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr Vap,

а Collapsed конвертор нормально отрабатывает? Пробовали дебажить его содержимое для случая когда DataContext задан?
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185234
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если DataContext оставить пустым все работает нормально а если DataContext="{Binding Item}"
то перестает работать IsExpanded Binding....
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185243
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pitachek69mr Vap,

а Collapsed конвертор нормально отрабатывает? Пробовали дебажить его содержимое для случая когда DataContext задан?

в том то и дело перестает работать когда DataContext задан
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185356
Фотография pitachek69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr Vap,

дайте код Collapsed и Item
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185378
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
Public Class ConverterBoolean
    Implements IValueConverter
    Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
        If IsDBNull(value) Then
            Return False
        Else
            Return CInt(value) = Integer.Parse(parameter.ToString())
        End If 
    End Function

    Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
        Return If(value.Equals(True), parameter, Binding.DoNothing)
    End Function

Public Class MyClassItems
    Implements INotifyPropertyChanged
    Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
    Private mCollapsed As Integer = 0
    Private mItem As New ClassItem
    Private mItem1 As New ClassItem
    Private mItem2 As New ClassItem
    Private mItem3 As New ClassItem

    Public Property Collapsed As Integer
        Get
            Return Me.mCollapsed
        End Get
        Set(ByVal value As Integer)
            Me.mCollapsed = value
            Me.OnChanged("Collapsed")
        End Set
    End Property
    Public Property Item As ClassItem
        Get
            Return Me.mItem
        End Get
        Set(ByVal value As ClassItem)
            Me.mItem = value
            Me.OnChanged("Item")
        End Set
    End Property
    Public Property Item1 As ClassItem
        Get
            Return Me.mItem1
        End Get
        Set(ByVal value As ClassItem)
            Me.mItem1 = value
            Me.OnChanged("Item1")
        End Set
    End Property
    Public Property Item2 As ClassItem
        Get
            Return Me.mItem2
        End Get
        Set(ByVal value As ClassItem)
            Me.mItem2 = value
            Me.OnChanged("Item2")
        End Set
    End Property
    Public Property Item3 As ClassItem
        Get
            Return Me.mItem3
        End Get
        Set(ByVal value As ClassItem)
            Me.mItem3 = value
            Me.OnChanged("Item3")
        End Set
    End Property

    Public Sub OnChanged(ByVal info As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    End Sub
End Class
Public Class ClassItem
    Implements INotifyPropertyChanged
    Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
    Private mValue1 As Integer = 0
    Private mValue2 As Integer = 0
    Private mValue3 As Integer = 0
    Public Property Value1 As Integer
        Get
            Return Me.mValue1
        End Get
        Set(ByVal value As Integer)
            Me.mValue1 = value
            Me.OnChanged("Value1")
        End Set
    End Property
    Public Property Value2 As Integer
        Get
            Return Me.mValue2
        End Get
        Set(ByVal value As Integer)
            Me.mValue2 = value
            Me.OnChanged("Value2")
        End Set
    End Property
    Public Property Value3 As Integer
        Get
            Return Me.mValue3
        End Get
        Set(ByVal value As Integer)
            Me.mValue3 = value
            Me.OnChanged("Value3")
        End Set
    End Property
    Public Sub OnChanged(ByVal info As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    End Sub
End Class
End Class
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185547
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr Vap,

естественно не выходит, почему вы тип в AncestorType опять Expander сделали?
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185566
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,

я туда много чего ставил и не работает
убираю DataContext и все нормально
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185591
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr Vap,

И Xaml тоже было бы неплохо. А с какой целью вы переопределяете DataContext Exanderа ?
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185606
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
    <Style x:Key="MyExpander" TargetType="Expander" >
        <Setter Property="Header" Value="{Binding Name}"/>
        <Setter Property="Margin" Value="1"/>
        <Setter Property="BorderBrush" Value="{StaticResource BrushBorderNormal}"/>
        <Setter Property="Background" Value="{StaticResource BrushBackNormal}"/>
        <!--<Setter Property="IsExpanded" Value="{Binding Expander}"/>-->
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Expander">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*" />
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <Border Name="Border" Grid.RowSpan="3" BorderThickness="1" CornerRadius="3" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" />
                        <ToggleButton Name="Toggle" IsChecked="{Binding Path=IsExpanded,Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
                                      BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"  
                                      Content="{TemplateBinding Header}" FontWeight="Bold" Style="{DynamicResource StyleCheckExpander}" Foreground="Blue" />
                        <ToggleButton IsChecked="{Binding Access}" Width="20" Margin="2" HorizontalAlignment="Right" Style="{DynamicResource StyleCheckAccess}"/>
                        <Grid Grid.Row="1" Margin="5,3,3,3" Name="Detail" >
                            <ContentControl Content="{TemplateBinding Content}" x:Name="ExpanderContent" Visibility="Visible"/>
                        </Grid>
                        <TextBlock Name="Text" FontSize="10" Foreground="Blue" FontWeight="Bold" Visibility="Collapsed" Grid.Row="2" Margin="2" Text="{Binding Text}" TextWrapping="WrapWithOverflow">
                            <TextBlock.Effect>
                                <DropShadowEffect BlurRadius="1" ShadowDepth="1" Color="Silver" />                                             
                            </TextBlock.Effect>
                        </TextBlock>
                        <!--<Border Grid.RowSpan="2" Style="{StaticResource BorderLighTop}"/>-->
                        <!--<Border Grid.RowSpan="2" Style="{StaticResource BorderDarkBottom}"/>-->
                    </Grid>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding Access}" Value="False">
                            <Setter TargetName="Text" Property="Foreground" Value="Black" />
                            <Setter Property="BorderBrush" Value="#FF313131" />
                            <Setter Property="Background" Value="WhiteSmoke" />
                            <Setter TargetName="Toggle" Property="Foreground" Value="Black" />
                        </DataTrigger>
                        <Trigger Property="IsExpanded" Value="False">
                            <Setter TargetName="Detail" Property="Visibility" Value="Collapsed" />
                            <Setter TargetName="Text" Property="Visibility" Value="Visible" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <!--<Setter Property="IsExpanded" Value="False" />-->
                            <!--<Setter TargetName="ExpanderButton" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />-->
                            <!--<Setter TargetName="ExpanderButton" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />-->
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style> <!--MyExpander-->
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185611
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще ужас если честно) а если у вас станет 4 элемента, будете переписывать?)
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185625
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,
а что ужасного? поправьте если что не так
стоит 8 элементов половина с большими списками и все нормально
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185648
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr Vap,

ну вообще на мой взгляд логичнее было бы применить ItemsControl с шаблоном) не было бы привязки, сколько у вас элементов.

P.S. Пример на сярпах, все работает. Так что вы видимо в привязке что то не то указали.

P.P.S. C# to VB .NET
...
Рейтинг: 0 / 0
Expander IsExpanded и DataContext
    #38185691
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,

спасибо нашел ошибку класс привязал и в Xaml и в коде на разных уровнях
убрал из кода все заработало

Код: vbnet
1.
Me.DataContext = Me.CF


Код: xml
1.
<Grid DataContext="{StaticResource CF}">
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Expander IsExpanded и DataContext
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]