Ответы пользователя по тегу C#
  • Как в C# проставить галочки всем элементам ListView?

    ZloyRabadaber
    @ZloyRabadaber
    Варианты есть разные, вот один из них.

    Допустим у нас есть такой ListBox:

    <ListBox ItemsSource="{Binding ItemCollection}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                 <StackPanel Orientation="Horizontal">
                     <CheckBox IsChecked="{Binding isChecked, Mode="TwoWay"}"/>
                     <TextBlock Text="{Binding Name}"/>
                 </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    


    Идея в том, чтобы каждому CheckBox`у добавить свойство и связать его с внешним (общим) CheckBox`ом. Вот что получилось

    xaml разметка:

    <Window x:Class="CheckBoxAll.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:CheckBoxAll"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <StackPanel>
                <ListBox x:Name="ListItems" ItemsSource="{Binding ItemCollection}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <CheckBox IsChecked="{Binding isChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" local:CheckBoxExt.IsCheckExt="{Binding ElementName=CheckAll, Path=IsChecked}"/>
                                <TextBlock Text="{Binding Name}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                <CheckBox x:Name="CheckAll" Content="Select all"/>
            </StackPanel>
        </Grid>
    </Window>
    


    Реализация расширенного свойства CheckBoxExt:

    namespace CheckBoxAll
    {
        public class CheckBoxExt
        {
            public static bool GetIsCheckExt(DependencyObject obj)
            {
                return (bool)obj.GetValue(IsCheckExtProperty);
            }
    
            public static void SetIsCheckExt(DependencyObject obj, bool value)
            {
                obj.SetValue(IsCheckExtProperty, value);
            }
    
            // Using a DependencyProperty as the backing store for IsCheckExt.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty IsCheckExtProperty =
                DependencyProperty.RegisterAttached("IsCheckExt", typeof(bool), typeof(CheckBoxExt), new PropertyMetadata((dp,arg) =>
                    {
                        if (dp is CheckBox)
                        {
                            var checkBox = dp as CheckBox;
                            checkBox.IsChecked = (bool)arg.NewValue;
                        }
                    }));
        }
    }
    


    Вот и все. Могу выложить проект в студии, но не знаю как (краснею от стыда), могу выслать на мыло.
    Ответ написан
    5 комментариев
  • Событие ComboBox_SelectionChanged, установленное в XAML, отрабатывает до отрисовки всей формы

    ZloyRabadaber
    @ZloyRabadaber
    Частенько ловлю себя на мысли, что если упираешься в необходимость жесткого порядка инициализации чего-либо, отрисовки, несвязных вызовов и т.д. и т.п. — это признак неправильной архитектуры приложения. Стоит посидеть подумать и попить чай с печеньками.
    Ответ написан
    Комментировать