Как добавить команды кнопкам в itemsControl

195
29 декабря 2021, 22:50

В первом окне я выбираю какая команда должна быть у моей кнопки, а в открывшемся окне я уже получаю кнопку, но при нажатии ничего не происходит.

У меня есть кнопки в ItemsControl, которые открывают разные окна, в зависимости от команды. Все команды лежат в ObservableCollection. Как мне правильно добавить эти команды к моим кнопкам в VM, чтобы к каждой кнопке была привязана именно ее команда?

Я пытался сделать как-то так, но тогда идет привязка только одной команды. Совершенно не могу понять как привязать для каждой кнопки свою команду.

public RelayCommand AddCommand => calculationDesignModel.InputList[0].AddCommand;

CalculationDesignModel


    #region Variables
        private string titleOutVariable;
        private string designationOutVariable;
        private string unitOutVariable;
        private string typeOutVariable;
        private string titleInVariable;
        private string designationInVariable;
        private string unitInVariable;
        private string typeInVariable;
        private int quantityInputList;
        private int indexInputItem;
        private string valueInVariable;
        private string imageFileName;

        private string resultFormula;
        private string result;
        private string formula;
        private bool calculateRadioButton;
        private string buttonContent;
        private string titleAddCalculate;

        private ObservableCollection<CalculationDesignModel> inputList = new ObservableCollection<CalculationDesignModel>();
        private RelayCommand addCommand;
        #endregion
        #region Properties
        public int Id { get; set; }
        public string TitleOutVariable { get => titleOutVariable; set => titleOutVariable = value; }
        public string DesignationOutVariable { get => designationOutVariable; set => designationOutVariable = value; }
        public string UnitOutVariable { get => unitOutVariable; set => unitOutVariable = value; }
        public string TypeOutVariable { get => typeOutVariable; set => typeOutVariable = value; }
        public string Formula { get => formula; set => formula = value; }
        public string TitleInVariable { get => titleInVariable; set => titleInVariable = value; }
        public string DesignationInVariable { get => designationInVariable; set => designationInVariable = value; }
        public string UnitInVariable { get => unitInVariable; set => unitInVariable = value; }
        public string TypeInVariable { get => typeInVariable; set => typeInVariable = value; }
        public int QuantityInputList { get => quantityInputList; set => quantityInputList = value; }
        public int IndexInputItem { get => indexInputItem; set => indexInputItem = value; }
        public string ValueInVariable
        {
            get => valueInVariable;
            set
            {
                valueInVariable = value;
                OnPropertyChanged("ValueInVariable");
            }
        }
        public string ResultFormula { get => resultFormula; set => resultFormula = value; }
        public string ImageFileName { get => imageFileName; set => imageFileName = value; }
        public string Result { get => result; set => result = value; }
        public ObservableCollection<CalculationDesignModel> InputList { get => inputList; set => inputList = value; }
        public bool CalculateRadioButton { get => calculateRadioButton; set => calculateRadioButton = value; }
        public string ButtonContent { get => buttonContent; set => buttonContent = value; }
        public string TitleAddCalculate { get => titleAddCalculate; set => titleAddCalculate = value; }
        public RelayCommand AddCommand
        {
            get => addCommand;
            set
            {
                addCommand = value;
                OnPropertyChanged("AddCommand");
            }
        }
   <ItemsControl AlternationCount="100" ItemsSource="{Binding InputList}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Tag="{Binding AddCommand, UpdateSourceTrigger=PropertyChanged}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="2*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="2*"/>
                                    <ColumnDefinition  Width="3*"/>
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                </Grid.RowDefinitions>
                                <TextBlock Grid.Column="0" Grid.Row="0" Margin="15 5" HorizontalAlignment="Left" VerticalAlignment="Center" Style="{StaticResource MaterialDesignSubheadingTextBlock}" Text="{Binding TitleInVariable, UpdateSourceTrigger=PropertyChanged}"/>
                                <Button Grid.Column="1" Grid.Row="0" Margin="5" Style="{StaticResource MaterialDesignFlatButton}"   VerticalAlignment="Center" HorizontalAlignment="Center" IsEnabled="{Binding CalculateRadioButton}" Content="{Binding ButtonContent}" Command="{Binding Tag,
                                    RelativeSource={RelativeSource FindAncestor,
                                    AncestorType=ItemsControl}}"/>
                                <!--<TextBlock Grid.Column="3" Grid.Row="0" Text="{Binding Path=(ItemsControl.AlternationIndex),RelativeSource={RelativeSource TemplatedParent}}"/> -->
                                <TextBox Grid.Column="2" Grid.Row="0" Margin="15" HorizontalAlignment="Stretch" VerticalAlignment="Center" Text="{Binding ValueInVariable, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
                                <TextBlock Grid.Column="3" Grid.Row="0" Margin="15 5" HorizontalAlignment="Left" VerticalAlignment="Center" Style="{StaticResource MaterialDesignSubheadingTextBlock}" Text="{Binding UnitInVariable}"/>
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

Мне нужно добавить команды для этой кнопки.

 <Button Grid.Column="1" Grid.Row="0" Margin="5" Style="{StaticResource MaterialDesignFlatButton}"   VerticalAlignment="Center" HorizontalAlignment="Center" IsEnabled="{Binding CalculateRadioButton}" Content="{Binding ButtonContent}" Command="{Binding Tag,
                                    RelativeSource={RelativeSource FindAncestor,
                                    AncestorType=ItemsControl}}"/>

Прошу, приведите пример правильного присвоения команды для Button в ItemsControl

READ ALSO
Не срабатывает таймер

Не срабатывает таймер

Имеется сервис, который собирает данные и отправляет в другой сервисСервис работает в докер-контейнере

180
Как объединить две строки вместе в PHP?

Как объединить две строки вместе в PHP?

Необходимо создать два поля формы, чтобы в одно поле ввести, например, 1000 строк и во второе поле 1000 строк, нажать на кнопку "Выполнить"

96
PostgreSQL импорт из файла

PostgreSQL импорт из файла

Какой самый быстрый способ импортировать файл CSV в базу данных кроме COPYДанных очень много, около 125 млн записей

216