将UserControl添加到MainWindow取决于已记录的帐户

时间:2014-07-24 12:13:16

标签: wpf vb.net xaml user-controls

我想问你,如何在MainWindow中添加/显示特定的用户控件,但是依赖于当前登录到我的应用程序的用户。如果员工显示EmployeeModule,则显示Admin显示AdminModule。 我有LoginDialog。如果UserId和Pass正确,则检查数据库并获取Access。如果Access =“EE”则:

Dim mainmen As New EmployeeModule
                    MainMenu.Children.Add(mainmen)
                    Grid.SetRow(mainmen, 0)

我知道如何为代码隐藏中的每个模块执行此操作,但我需要为每个模块设置x:Name和x:FieldModifier,因为我需要从MainWindow访问每个用户控件。像那样:

<Grid x:Name="MainMenu" Grid.Row="0" Grid.Column="0" Background="Transparent" Margin="0,10,10,0" Height="694" VerticalAlignment="Top" Grid.RowSpan="2">
        <local:EmployeeMainMenu x:Name="emploman" x:FieldModifier="public"/>
    </Grid>

然后我使用“emploman”名称进入用户控件。

是否可以在xaml中执行此操作(对于具有可见性的每个项目添加,如果Access =“EE”(在这种情况下),将从例如隐藏为可见的更改。

一点点凌乱,但我希望你能理解我的观点......

非常感谢!

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用DataTemplate。如果您不熟悉这些内容,那么您应该阅读MSDN上的Data Templating Overview‎页面。基本上,如果您为每种类型的数据声明DataTemplate未在其上设置x:Key属性值,那么框架将隐式将它们应用于您的数据看到它时:

<DataTemplate DataType="{x:Type YourPrefix:Employee}">
    <!-- Define your Employee XAML here -->
</DataTemplate>
<DataTemplate DataType="{x:Type YourPrefix:Admin}">
    <!-- Define your Admin XAML here -->
</DataTemplate>

现在添加一个object类型的属性(如果这是数据模型类的基类,则更好):

public object DataItem { get; set; } // Implement INotifyPropertyChanged here

然后您可以将数据绑定到ContentControl

<ContentControl Content="{Binding DataItem}" />

最后在您的代码中,您可以执行此操作,WPF将负责其余的工作:

if (Access == "EE") DataItem = new Employee();
else DataItem = new Admin();