【发布时间】:2014-10-27 08:26:48
【问题描述】:
我的应用程序中的组合框似乎很敏感,原因他们最清楚。
我在注册页面上使用 MVVM 模式。这意味着我视图中的信息都是从我创建的类(ViewModel)加载的,而 UserControls(Views) 背后的唯一代码是 DataContext 的设置。
我正在使用实体框架 6,因此用户控件文本框和 cobobox 绑定到集合视图类。
所以在 xaml 中设置了 CollectionView 类的数据上下文:
<Grid DataContext="{StaticResource signupsViewSource}">
在userControl的代码后面是这样的:
DataContext = new registrationSQL();
这是让我烦恼的部分。视图模型:
您会看到,当我这样放置代码时,组合框可以完美加载:
class registrationSQL
{
#region Declarations
// Medcare2 is the name of the app
Medcare2.mascamainDataSet mascamainDataSet = ((Medcare2.mascamainDataSet)(Application.Current.FindResource("mascamainDataSet")));
Medcare2.mascamainDataSetTableAdapters.signupsTableAdapter mascamainDataSetsignupTableAdapter = new Medcare2.mascamainDataSetTableAdapters.signupsTableAdapter();
System.Windows.Data.CollectionViewSource signupsViewSource = (System.Windows.Data.CollectionViewSource)Application.Current.Resources["signupsViewSource"];
mascamainEntities context = new mascamainEntities();
#endregion
#region Constructor
public registrationSQL()
{
// Fill the dataset table signups
mascamainDataSetsignupTableAdapter.Fill(mascamainDataSet.signups);
// Select the first record
signupsViewSource.View.MoveCurrentToFirst();
}
#endregion
完成后,整个用户控件加载正常:
没关系。但是,当我告诉窗口打开另一个用户控件时,它应该加载相同的信息(只是具有不同的布局),使用相同的 ViewModel 和 collectionView,CollectionView 将其选择切换回第一条记录。当我需要它做的是留在已经选择的记录上。
之所以会发生这种情况,是因为当打开下一个 UserControl 时,它会初始化 ViewModel 的一个新实例,并且将选择移动到第一条记录的命令重新执行。为了避免这种情况,我决定实现 Viewmodel 的静态实例。
private static registrationSQL instance = new registrationSQL();
public static registrationSQL Instance
{
get
{ return instance; }
}
并在两个用户控件上为其设置数据上下文。
DataContext = registrationSQL.Instance;
但是,当我运行应用程序时,第一个用户控件加载正常,第二个 UC 从第一个离开的记录中起飞,但组合框没有加载,即使我滚动到下一个或上一个记录。
有什么线索可以让他们传达数据吗?
编辑
我可能需要补充一点,为了让组合框工作,我需要滚动到最开始/结束,直到视图中没有加载记录,然后再次滚动回第一个/最后一个记录。
或者,我可以像这样加载它们,但是当这样做时,我不确定是否有任何方法可以将自定义组合框项添加到下拉选项中:
<ComboBox x:Name="genderComboBox" ItemsSource="{Binding}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
【问题讨论】:
标签: c# mvvm combobox entity-framework-6