【问题标题】:Display usercontrol depending on conditions根据条件显示用户控件
【发布时间】:2015-05-27 10:33:57
【问题描述】:

我有一个简单的 WPF MVVM 应用程序,它由一个 MainWindow 和两个 UserControl(LoginRegister)和数据库表 Users 组成。我想将用户控件绑定到主窗口,例如,如果在我的 sql 表中已经存在数据,则将显示 Login 用户控件,否则将显示 Register 用户控件。

【问题讨论】:

  • 如果用户存在然后登录用户控件响应并且用户不存在然后注册用户控件来,您可以将所有 sql 代码传递给主加载事件。
  • 很确定您可以通过将 UserControls 的 Visibility 属性绑定到 ViewModel 中的属性来解决此问题,如下所示:stackoverflow.com/questions/10607548/…

标签: c# wpf mvvm


【解决方案1】:

如果您查看我对WPF MVVM navigate views 问题的回答,您会找到一种在一个地方显示不同视图的方法。您的问题的答案是让您实现一个类似的设置,您可以在其中显示您的Login 视图或您的Register 视图:

public BaseViewModel ViewModel { get; set; }

...

<DataTemplate DataType="{x:Type ViewModels:LoginViewModel}">
    <Views:LoginView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:RegisterViewModel}">
    <Views:RegisterView />
</DataTemplate>

当您的主视图模型加载时,您只需要检查数据库中是否有当前用户的任何数据,然后选择显示相关视图...可能是这样的:

ViewModel = IsUsernameRegistered(username) ? new LoginView() : new RegisterView();

【讨论】:

    【解决方案2】:

    我的答案是 在 App.xaml.cs 中编写以下方法并从 App.xaml

    中删除 StartupUri=""
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
    
            var con = new SqlConnection
            {
                ConnectionString = "Data Source=localhost;Initial Catalog=demo;User ID=sa;Password=mypassword;"
            };
            con.Open();
            const string chkadmin = "select COUNT(*) from dbo.Registrations";
            var command = new SqlCommand(chkadmin, con);
            int count = Convert.ToInt32(command.ExecuteScalar());
            if (count == 0)
            {
                var reg = new AdminUser(); //this is the Registration window class
                this.MainWindow = reg;
                reg.Show();
            }
            else
            {
                var win = new Home(); //this is the Home window class
                this.MainWindow = win;
                win.Show();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多