我有一个绑定到tbPublications的ObservableCollection的ComboBox,它会按应该的方式进行填充。然后,我从触发另一个Create表单的DataGrid中选择一行,在该表单中向tbPublications插入一条新记录,一切正常。
当我关闭create form并返回到我的ComboBox表单时,我正在清除并重新读取ObservableCollection中的一个新项目,使用户返回到他们刚刚创建的项目。然后,ComboBox显示我新填充的集合中的一项: all good。
我的问题是,在返回到我的ComboBox表单时,新发布内容没有在ComboBox显示中设置为选定项,用户必须单击ComboBox,然后选择该项。
我不能在视图XAML中使用SelectedIndex = "0",因为我想在页面加载时在ComboBox中显示整个ObservableCollection。
有没有办法在ViewModel中使用一个方法来解决这个问题,比如..
private void SetSelectedIndex()
{
if (MyObservableCollection.Count == 1)
{
//Set selected indexer to "0";
}
}找到了一个解决方案,不确定它是否是最干净的'MVVM‘解决方案...
在读入我的ObservableCollection之后,我调用这个方法:
if (_ModelPublicationsObservableList.Count == 1)
{
SelectedPublication = _ModelPublication;
SetSelectedIndex();
}下面是获取当前主窗口并设置SelectedIndex的方法:
private void SetSelectedIndex()
{
ArticlesDataGridWindow singleOrDefault = (ComboBoxWindow)Application.Current.Windows.OfType<ComboBoxWindow>().SingleOrDefault(x => x.IsLoaded);
singleOrDefault.comboBox1.SelectedIndex = 0;
}发布于 2014-02-27 21:46:29
您是否考虑过使用combobox的SelectedItem属性?您可以绑定combobox的selected item属性来获取或设置所选项目。
XAML
<ComboBox ItemsSource="{Binding Path=Publications}" SelectedItem="{Binding Path=SelectedPublication, Mode=TwoWay}" />ViewModel
public class ItemListViewModel
{
public ObservableCollection<Publication> Publications {get; set;}
private Publication _selectedPublication;
public Publication SelectedPublication
{
get { return _selectedPublication; }
set
{
if (_selectedPublication== value) return;
_selectedPublication= value;
RaisePropertyChanged("SelectedPublication");
}
}
}如果要设置视图模型中的选定项,可以将SelectedPublication属性设置为-
SelectedPublication = Publications[0];或者,您可以在发布集合中找到所需的项,并将其分配给SelectedPublication属性。
发布于 2014-02-28 19:31:19
将UpdateSourceTrigger=PropertyChanged添加到绑定中。
SelectedItem={Binding Path=SelectedPublication, Mode=TwoWay}, UpdateSourceTrigger=PropertyChanged}https://stackoverflow.com/questions/22070049
复制相似问题