我的应用程序中的组合框似乎很敏感,原因是他们最熟悉的。
我在注册页面上使用 MVVM 模式。这意味着我 View 中的信息都是从我创建的类(ViewModel)加载的,而 UserControls(Views) 背后的唯一代码是 DataContext 的设置。
我正在使用 Entity Framework 6,因此用户控件文本框和 coboboxes 绑定(bind)到 Collection View 类。
所以在 xaml 中为 CollectionView 类设置了一个数据上下文:
<Grid DataContext="{StaticResource signupsViewSource}">
userControl后面的代码中的一个是这样的:
DataContext = new registrationSQL();
这是让我烦恼的部分。 View 模型:
您会看到,当我这样放置代码时,组合框会完美加载:
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
完成后,整个用户控件加载正常:
没关系。但是,当我告诉 Window 打开另一个 UserControl,它应该加载相同的信息(只是使用不同的布局),使用相同的 ViewModel 和 collectionView,CollectionView 将其选择切换回第一条记录。当我需要它做的是留在已经选择的记录上。
之所以会发生这种情况,是因为当打开下一个 UserControl 时,它会初始化 ViewModel 的一个新实例,并且将选择移动到第一条记录的命令重新执行。为了避免这种情况,我决定实现 Viewmodel 的静态实例。
private static registrationSQL instance = new registrationSQL();
public static registrationSQL Instance
{
get
{ return instance; }
}
并在两个 UserControls 上为其设置数据上下文。
DataContext = registrationSQL.Instance;
但是,当我运行应用程序时,第一个用户控件加载正常,第二个 UC 从第一个停止的记录中起飞,但组合框没有加载,即使我滚动到下一个或上一个记录。
有什么线索可以让他们传达数据吗?
编辑
我可能需要补充一点,为了让组合框工作,我需要滚动到最开始/结束,直到 View 中没有加载记录,然后再次滚动回第一个/最后一个记录。
或者,我可以像这样加载它们,但是当以这种方式完成时,我不确定是否有任何方法可以将自定义组合框项添加到下拉选项中:
<ComboBox x:Name="genderComboBox" ItemsSource="{Binding}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
最佳答案
第一个问题:保持相同的记录
=> 当您单击表单选项卡时,在特定时间检查“标签”文本区域是否为空,如果不为空,则将该“标签”编号发送到数据获取数据库代码以获取该信息。
你得到这个问题是因为,子标签不同,你需要用值得的值再次覆盖它包含的文本。
可能是第二个:
您可能需要重新加载复选框以再次初始化。
(仍为第 2 期:请详述)
关于c# - 组合框不会加载数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583519/