ImmortalCAT
@ImmortalCAT
C# loving

Как работать с CheckBox который находится в CollectionViewSource?

Есть
<Page.Resources>
        <CollectionViewSource x:Name="Maincol" />
    </Page.Resources>

и есть хабсекшин
<HubSection x:Name="Images" Header="ListView" Width="400">
                <DataTemplate>
                    <ListView x:Name="ListView1" SelectionMode="None" ItemsSource="{Binding Source={StaticResource cvs2}}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" x:Name="stackpanel">
                                    <Image Source="{Binding ImageSourse}" Width="80" Height="60"/>
                                    <StackPanel Orientation="Vertical" Background="LightGray" Width="150">
                                        <TextBlock Text="{Binding NameT}" FontSize="14.667" FontFamily="Segoe UI" Margin="5,0,0,0" Foreground="#FF472F2F"/>
                                        <TextBlock Text="{Binding ScreenT}" FontSize="12" FontFamily="Segoe UI" Margin="5,0,0,0" Foreground="#FF472F2F"/>
                                        <CheckBox Margin="5,0,0,0"  IsChecked="{Binding Check}" ></CheckBox>
                                    </StackPanel>
                                </StackPanel>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </DataTemplate>
            </HubSection>

Как взаимодействовать с CheckBox'ом после заполнения коллекции, как узнать его состояние?
Как до него добраться.... ?)
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Для манипулирования объектами внутри DataTemplate есть три варианта:
1. Converters.
2. Attach property
3. VisualTreeHelper.GetChild() (Не самый лучший способ. т.к. code behind страницы в идеале должен быть пустым):
public static IEnumerable<T> GetAllChildren<T>(this UIElement frameworkElement) where T : UIElement
        {
            if (frameworkElement == null)
            {
                yield break;
            }
            
            for (var i = 0; i < VisualTreeHelper.GetChildrenCount(frameworkElement); i++)
            {
                var _Child = VisualTreeHelper.GetChild(frameworkElement, i);
                if (_Child is T)
                {
                    yield return (_Child as T);
                }
                var control = _Child as UIElement;
                foreach (var child in GetAllChildren<T>(control))
                {
                    yield return child;
                }
            }
        }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sumor
В свойство связывания добавьте атрибут Mode=TwoWay. В этом случае изменение отметки в CheckBox будет передаваться привязаному объекту. Состояние отметки можно узнать у свойства Check соответствующего объекта.
<CheckBox Margin="5,0,0,0"  IsChecked="{Binding Check, Mode=TwoWay}" >
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы