【发布时间】:2015-04-16 09:37:29
【问题描述】:
我正在尝试获取 MVVM 中 ComboBox 的值并将其传递给我的 ViewModel。
我在 xaml 中的组合框是..
<ComboBox
DataContext="{StaticResource WorkorderGroups}"
Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
Height="20"
ItemsSource="{Binding Path=AllC}"
SelectedItem="{Binding Path=SelectedC, Mode=TwoWay}"
/>
然后在WorkorderView中设置选中项
public List<long?> AllC
{
get
{
return _workorderRepository.GetCustomersID();
}
set
{
if (value == _workorderRepository.GetCustomersID())
return;
value = _workorderRepository.GetCustomersID();
base.OnPropertyChanged("AllC");
}
}
public string SelectedC
{
get
{
return item;
}
set
{
item = value;
OnPropertyChanged("SelectedC");
}
}
然后单击一个按钮,我试图在 AllWorkorderViewModel 中访问它,我正在使用以下代码...
public ICommand Test
{
get
{
if (_test == null)
{
_test = new RelayCommand(
param => this.Testy()
);
}
return _test;
}
}
public void Testy()
{
List<string> s = this.AllWorkorders.Select(C => C.SelectedC).ToList();
string s1 = s[0];
}
请忽略方法名称,这只是草稿代码。
我的问题是它返回的字符串不是选定的项目,它是一个包含 200 多个项目的列表,它们都是空的。有谁知道为什么?
谢谢。
【问题讨论】:
-
一个问题是
SelectedC应该是来自AllC的一个实例。如果它是来自上一个调用的实例,并且AllC中的最后一个调用返回了与SelectedC不同(等效)的实例,那么您就破坏了组合框的工作方式。