我有一个数据网格,其结构如下:
Question 1 text question 1 <pull down>
Question 2 text question 2 <pull down>
Question 3 text question 3 <pull down>
下拉组合框都有相同的选项:是,否,可能。 现在,我把选项放在一个可观察的集合中。
我的问题是:如何绑定组合框的选定项属性,使其从源observablecollection的其他对象中拉出来?
这里有一些代码可能会让我更清楚我正在尝试做什么
public class ViewModel
{
ObservableCollection<string> options;
ObservableCollection<question> questions;
}
public class question
{
public string selectedOption;
}
答案 0 :(得分:0)
如果我理解你的问题,我认为简短的答案是&#34;你不能&#34;。 WPF检查选择项是否是itemssource的一部分,如果不是,则不会显示selecteditem。您尝试为用户创建什么样的行为?也许还有另一种方法可以达到你想要的效果。
编辑也许这个类似/重复的问题+答案对你有帮助吗? How to set SelectedItem of a ComboBox when item is not part of the ItemsSource collection?
答案 1 :(得分:0)
如果我正确地解释了您的问题,您希望对问题的答案选项使用相同的源列表,但是要确保选择保持彼此独立。 这是你想要的东西吗?
XAML
<StackPanel>
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Question 1"/>
<ComboBox x:Name="cbxOne" ItemsSource="{Binding Options}"
SelectedItem="{Binding Questions[0].selectedOption}"></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Question 2"/>
<ComboBox ItemsSource="{Binding Options}"
SelectedItem="{Binding Questions[1].selectedOption}"></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Question 2"/>
<ComboBox ItemsSource="{Binding Options}"
SelectedItem="{Binding Questions[2].selectedOption}"></ComboBox>
</StackPanel>
</StackPanel>
<ListBox ItemsSource="{Binding Questions}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content ="{Binding selectedOption}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
代码隐藏
public partial class MainWindow : Window
{
ViewModel vm;
public MainWindow()
{
InitializeComponent();
vm = new ViewModel();
this.DataContext = vm;
}
}
public class ViewModel
{
public ObservableCollection<string> Options { get; set; }
public ObservableCollection<question> Questions { get; set; }
public ViewModel()
{
Options = new ObservableCollection<string> { "Yes", "No", "Maybe" };
Questions = new ObservableCollection<question>();
Questions.Add(new question());
Questions.Add(new question());
Questions.Add(new question());
}
}
public class question
{
public string selectedOption { get; set; }
}
如果在测试构造函数中,我为集合中的问题分配了一个值,如
Questions[0].selectedOption = "Yes";
Questions[1].selectedOption = "bogus";
然后第一个组合框将选择“是”,因为“Yes”存在于用作ItemSource的集合中,但第二个组合将为空白 因为没有匹配的价值。它仍然显示在底部,因为我没有在那里进行任何检查验证。