【问题标题】:Using A checkbox inside a ListBox在 ListBox 中使用复选框
【发布时间】:2014-04-22 16:45:55
【问题描述】:

我有这个列表框: 这是我的列表框的代码:

<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>

它里面有一个复选框,列表框由 SQLite 数据库中的数据填充。我希望当我选中 Checkbox 时收到一条消息,显示 ListBox 的 SelectedItem 的名称。 这是我的 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");
            }
        }
    }

那么问题出在哪里。

【问题讨论】:

  • Help me - This Post 包含非常有用的信息。请阅读。
  • 这取决于你所说的显示消息(MessageBox?)是什么意思,或者你想在选中框时触发一个事件?
  • 我已经发布了更多信息。
  • 请检查输出是否有任何调试错误。
  • 应用程序运行时没有错误,我做错了什么??

标签: c# wpf itemtemplate


【解决方案1】:

不是一个答案,但评论太多了
这只是搞砸了
您需要阅读数据绑定并重新开始

下面的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 上

【讨论】:

    【解决方案2】:

    就像@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");
    }
    

    另外两件事:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多