Использование флажка внутри ListBox

У меня есть этот список: Вот код для моего ListBox:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <ListBox x:Name="List" Grid.Row="0" ItemsSource="{Binding ShoppingItems}" FontSize="42" FontWeight="Light" FontFamily="Segoe WP Light" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Visible">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid Grid.Column="0" Margin="0,-15,0,22">
                            <Checkbox x:Name="MyCheckBox" IsChecked="{Binding IsChecked,Mode=TwoWay}"/>
                        </Grid>
                    <Grid x:Name="MyGrid" Margin="0,-15,0,22" Grid.Column="1">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <TextBlock Text="{Binding DisplayingItem}" FontSize="46" Grid.Column="0" Grid.Row="0" TextWrapping="Wrap" />
                        <TextBlock Text="quantity" FontSize="32" Grid.Row="1" Margin="6,0,0,0" Grid.Column="0" TextWrapping="Wrap"/>
                        <TextBlock Text="{Binding DisplayingQuantity}" FontSize="32" Grid.Column="1" Grid.Row="1" Margin="32,0,12,12" TextWrapping="Wrap"/>
                        <TextBlock Grid.Column="2" Grid.Row="1" FontSize="32" Margin="32,0,12,12" Text="{Binding DisplayingPackaging}" TextWrapping="Wrap"/>
                        <TextBlock Text="price" Margin="6,0,0,0" FontSize="32" Grid.Row="2" Grid.Column="0" TextWrapping="Wrap"/>
                        <TextBlock Text="$" FontSize="32" Grid.Row="2" Grid.Column="1" Margin="32,0,12,12" TextWrapping="Wrap"/>
                        <TextBlock Grid.Column="3" FontSize="32" Grid.Row="2"  Margin="32,0,12,12" Text="{Binding DisplayingPrice}" TextWrapping="Wrap"/>
                    </Grid>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

у него есть флажок внутри, ListBox заполняется данными из базы данных SQLite. Я хочу, когда я устанавливаю флажок, чтобы получить сообщение, показывающее мне имя SelectedItem в ListBox. Вот свойство для моего CheckBox

private bool isChecked;
    public bool  IsChecked
    {
        get
        {
             if(this.SelectedItem != null)
             {
                 return this.selectedItem.IsChecked;
             }
             return false;
        }
        set
        {
            this.isChecked = value;
        }

    }

Когда я устанавливаю флажок и нажимаю эту кнопку:

private void CheckedItem(object p)
    {

        if (this.IsChecked != false)
        {
            MessageBox.Show("Checked");
        }
    }

Ничего не произошло. Я включил свой флажок в свой SelectedItem Вот так:

private ShowingModel selectedItem;
    public ShowingModel SelectedItem
    {
        get
        {
            return selectedItem;
        }
        set
        {
            if(this.selectedItem != value)
            {
                this.selectedItem = value;
                if (this.selectedItem != null)
                {
                    this.product = selectedItem.DisplayingItem;
                    this.price = selectedItem.DisplayingPrice;
                    this.qty = selectedItem.DisplayingQuantity;
                    this.package = selectedItem.DisplayingPackaging;
                    this.isChecked = selectedItem.IsChecked;
                }
                RaisePropertyChanged("MyPackage");
                RaisePropertyChanged("MyPrice");
                RaisePropertyChanged("MyProduct");
                RaisePropertyChanged("MyQty");
                RaisePropertyChanged("IsChecked");
            }
        }
    }

Итак, в чем проблема.


person StarNet    schedule 22.04.2014    source источник
comment
Help me – Это сообщение содержит очень полезную информацию. Пожалуйста, прочтите это.   -  person Federico Berasategui    schedule 22.04.2014
comment
это зависит от того, что вы подразумеваете под показом сообщения (MessageBox?), или вы хотите запустить событие при установке флажка?   -  person Henka Programmer    schedule 22.04.2014
comment
Я разместил больше информации.   -  person StarNet    schedule 22.04.2014
comment
Пожалуйста, проверьте вывод на наличие ошибок отладки.   -  person Eldho    schedule 22.04.2014
comment
Нет ошибок, приложение работает, я делаю что-то не так??   -  person StarNet    schedule 22.04.2014


Ответы (2)


Не ответ, но слишком много для комментария
Это просто испорчено
Вам нужно прочитать о привязке данных и начать сначала

Следующие get и set не относятся к одному и тому же значению

private bool isChecked;
public  bool IsChecked
{
    get
    {
         if(this.SelectedItem != null)
         {
             return this.selectedItem.IsChecked;
         }
         return false;
    }
    set
    {
        this.isChecked = value;
    }
}

Нет указаний на то, что SelectedItem привязан к чему-либо

На CheckedItem, который не является сигнатурой обработчика событий

person paparazzo    schedule 22.04.2014

Как сказал @Blam, ваша непосредственная проблема решается путем фактической установки обработчика событий для CheckBox «MyCheckBox».

<CheckBox x:Name="MyCheckBox" IsChecked="{Binding IsChecked,Mode=TwoWay}" 
Checked="MyCheckBox_Checked"/>

private void MyCheckBox_Checked(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Checked");
}

2 другие вещи:

person tc2617    schedule 22.04.2014