Привязка button к Int

323
15 сентября 2017, 18:24

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

<DataTemplate x:Key="PriceItems">
    <StackPanel Background ="Azure"  Orientation="Horizontal" Margin="10,10">
        <Button x:Name="IncrementBtn" Content="+" FontSize="18" Width="80"  />
        <Label x:Name="CntLabel"  Content="{Binding DataContext.TicketCnt, RelativeSource={RelativeSource TemplatedParent}}" VerticalContentAlignment="Center" HorizontalAlignment="Center" FontSize="16"/>
        <Button x:Name="DecrementBtn" Content="-" FontSize="18" Width="80" Margin="10,10"/>
    </StackPanel>
</DataTemplate>
Answer 1

Допустим, вы выводите в окне некую коллекцию элементов. Пусть тип этих элементов Item:

class Item : INotifyPropertyChanged
{
    ...
    int v;
    public int Value
    {
        get => v;
        set 
        {
            v = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Value)));
        }
    }
}

Не буду пугать вас MVVM, я просто привяжу коллекцию этих элементов в конструкторе окна:

public MainWindow()
{
    InitializeComponent();
    IC.ItemsSource = new[]
    {
        new Item { Value = 10 },
        new Item { Value = 12 },
        new Item { Value = 15 },
        new Item { Value = 22 },
        new Item { Value = 27 }
    };
}

Разметка:

<ItemsControl Name="IC">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid Margin="2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="30"/>
                    <ColumnDefinition Width="24"/>
                    <ColumnDefinition Width="20"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Value}"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Right"/>
                <Button Content="+" Grid.Column="1" Margin="2,0"
                        Click="Plus_Click"/>
                <Button Content="-" Grid.Column="2"
                        Click="Minus_Click"/>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Обработчики событий:

private void Plus_Click(object sender, RoutedEventArgs e)
{
    ((Item)(sender as Button).DataContext).Value++;
}
private void Minus_Click(object sender, RoutedEventArgs e)
{
    ((Item)(sender as Button).DataContext).Value--;
}

READ ALSO
Можно/нужно ли делать сервисы бизнес логики одиночками (Singleton) или статическими?

Можно/нужно ли делать сервисы бизнес логики одиночками (Singleton) или статическими?

Например у меня есть сервисы ScannerService и UsersServiceПервый отвечает за управление сканером на устройстве, второй получает данные из базы данных...

264
Проблема с методом Insert

Проблема с методом Insert

Есть метод, который вставляет пробелы перед прописными буквамиЕсть ошибка: в 1 вызове метода пробел ставится только 1 раз, даже если там есть...

148
Ошибка во время первой отправки почты C#

Ошибка во время первой отправки почты C#

На сервере крутится служба, которая согласно определенных событий отправляет почтуСтолкнулся со следующей ошибкой:

177
c# Как перейти в другой класс

c# Как перейти в другой класс

Заранее прошу прощения за тупой вопросНо допустим я работаю в одном классе, есть определенный цикл, в котором условием является переход в другой...

219