【发布时间】: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");
}
}
这里有什么问题?
我的第二个问题是: 一旦上述问题得到解决,我需要将所有检查过的姓名(在这种情况下为员工姓名)附加到一个列表中,并将这些值传递回一个单独的视图/视图模型。
我完全不知道如何做到这一点。 任何帮助或建议将不胜感激。
谢谢:)
【问题讨论】:
-
为什么指定
RelativeSource?DataContext传递给每个孩子。输出是否有任何绑定错误? -
到目前为止没有绑定错误。 RelativeSource 是作为“事后考虑”添加的,以尝试获取传递给 ViewModel 的值……这似乎不起作用。无论有没有命令条目,它似乎都会产生相同的东西
-
{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ComboBoxItem}}, Path=IsSelected,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}所以 IsChecked 只有在选择 ComboBoxItem 时才为真?这是没有意义的。我认为您的控件设计有点不稳定。听起来您应该使用带有检查绑定到模型的 ListBox。 -
这个特定窗口的空间有限。组合框似乎是最好的解决方案。
标签: c# wpf mvvm checkbox combobox