【问题标题】:MVVM WPF ComboBox with CheckBox带有复选框的 MVVM WPF 组合框
【发布时间】:2013-02-21 19:48:02
【问题描述】:

我已经尝试搜索了很长时间,但没有找到有用的结果。 (也许我的 google-foo 需要工作?) 我对 WPF MVVM 也很陌生,所以我还在学习很多东西。

我的问题实际上分为两部分...... 首先,我有一个组合框,其中在视图中包含复选框。 代码:

 <ComboBox Grid.Column="0"
                      Grid.ColumnSpan="5"
                      Margin="15,0,0,0"
          ItemsSource="{Binding StaffNames}" 
                      SelectedValue="{Binding SelectedStaffNames}"
          Grid.Row="4">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <CheckBox Content="{Binding Path=FullName}"
                                  VerticalAlignment="Center"
                                  IsChecked="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ComboBoxItem}},     Path=IsSelected,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
                                  Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window},
                            Path=DataContext.CheckBoxSelected}"
                                  Margin="3">  
                        </CheckBox>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

每次我选中一个复选框时,似乎这些复选框都会自动取消选中。

我的 ViewModel 代码如下。

private bool _isSelected;
        public bool IsSelected
        {
            get
            {
                return _isSelected;
            }
            set
            {
                _isSelected = value;
                RaisePropertyChanged("IsSelected");
            }
        }

这里有什么问题?

我的第二个问题是: 一旦上述问题得到解决,我需要将所有检查过的姓名(在这种情况下为员工姓名)附加到一个列表中,并将这些值传递回一个单独的视图/视图模型。

我完全不知道如何做到这一点。 任何帮助或建议将不胜感激。

谢谢:)

【问题讨论】:

  • 为什么指定RelativeSourceDataContext 传递给每个孩子。输出是否有任何绑定错误?
  • 到目前为止没有绑定错误。 RelativeSource 是作为“事后考虑”添加的,以尝试获取传递给 ViewModel 的值……这似乎不起作用。无论有没有命令条目,它似乎都会产生相同的东西
  • {Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ComboBoxItem}}, Path=IsSelected,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay} 所以 IsChecked 只有在选择 ComboBoxItem 时才为真?这是没有意义的。我认为您的控件设计有点不稳定。听起来您应该使用带有检查绑定到模型的 ListBox。
  • 这个特定窗口的空间有限。组合框似乎是最好的解决方案。

标签: c# wpf mvvm checkbox combobox


【解决方案1】:

2 件可能出错的事情

  1. 您是否尝试在命令“DataContext.CheckBoxSelected”中设置复选框值?由于您已经有一个绑定,这可能会重置该值。

  2. 单击复选框不会更新组合框中的选定项,而只会更新复选框。

【讨论】:

  • 好的,所以我将复选框更改为: IsChecked="{Binding IsSelected}" 复选框的“内容”包含值...应该以不同的方式完成吗?
  • 好吧,我们应该认为这个问题是stackoverflow.com/questions/859227/…的副本
  • 等等...怎么是重复的?
  • 这怎么不是重复的?您希望组合框中有一个带有绑定的复选框。这就是另一篇文章所说的。
  • 我已经绑定了。我正在寻找的是如何检索复选框的内容(或文本)的数据,以便可以将其传递给不同的视图模型。
猜你喜欢
  • 2018-10-19
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多