我的应用程序中的组合框似乎对他们最熟悉的原因很敏感。
我在注册页面上使用MVVM模式。这意味着我视图中的信息都是从我创建的类(ViewModel)加载的,而UserControls(Views)背后的唯一代码是DataContext的设置。
我使用实体框架6,因此用户控制文本框和coboboxes绑定到集合视图类。
因此,在xaml中设置了CollectionView类的数据上下文:
<Grid DataContext="{StaticResource signupsViewSource}">
在userControl的代码中有一个像这样:
DataContext = new registrationSQL();
这是困扰我的部分。 ViewModel:
你知道当我放置这样的代码时,组合框完全加载:
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从第一个关闭的记录开始,但组合框不加载,即使我滚动到下一个或上一个记录。
有什么线索可以让他们传达数据?
修改的
我可能需要添加它以便让我使组合框工作,我需要滚动到开始/结束,直到视频中没有加载记录然后再次滚动回到第一个/最后一个记录。
或者我可以像这样加载它们但是当这样做时,我不确定是否有任何方法可以将自定义的comboBox项添加到下拉选项中:
<ComboBox x:Name="genderComboBox" ItemsSource="{Binding}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
答案 0 :(得分:0)
第一期:保持同一记录
=&GT;当您单击表单选项卡时,在该特定时间,检查&#34;标记&#34;文本区域是否为空,如果不为null,则发送&#34;标记&#34;数据获取数据库代码以获取该信息。
你得到这个问题becoz,标签子项是不同的,你需要再次覆盖它包含的文本,值是值得的。
可能是第二名: 你可能需要重新加载复选框才能再次初始化。 (仍为第二期:请详细说明)