C# modelview中的WPF更改控制
我创建了一个类似于的解决方案。但我不得不改变一些事情 例如,我创建了一个简单的登录命令。这很好用。我创建了一个绑定到登录命令的按钮C# modelview中的WPF更改控制,c#,.net,wpf,C#,.net,Wpf,我创建了一个类似于的解决方案。但我不得不改变一些事情 例如,我创建了一个简单的登录命令。这很好用。我创建了一个绑定到登录命令的按钮 public RelayCommand LoginCommand { get { return new RelayCommand(Login); } } public void Login(object o) { if (Membership.ValidateUser
public RelayCommand LoginCommand {
get {
return new RelayCommand(Login);
}
}
public void Login(object o) {
if (Membership.ValidateUser(Username, Password)) {
ErrorVisible = Visibility.Hidden;
} else {
ErrorVisible = Visibility.Visible;
}
}
我测试了这个,效果很好。但是,当登录成功时,我希望将用户控件更改为其他控件。但我不知道怎么做。如何在视图模型中更改ContentControl内容?因此,实际上,将当前登录控件替换为另一个控件。您可以像往常一样绑定:
<ContentControl Content="{Binding Path=PropertyWithUI}"/>
但这不是最好的方法,最好将两个控件都放在窗口上,并将它们的可见性属性绑定到VM中的属性
编辑:
以下是一个例子:
在XAML中,我有一个内容控件和一个按钮:
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Content="{Binding Path=Control}"></ContentControl>
<Button Grid.Row="1" Height="40" Click="Button_Click">Change control</Button>
</Grid>
和其他窗口代码。我创建了th VM的一个实例,并用一个新的文本框初始化控件属性
readonly MyMVVM mvvm = new MyMVVM();
public MainWindow()
{
InitializeComponent();
DataContext = mvvm;
mvvm.Control = new TextBox() {Text = "this is a text box"};
}
当用户单击时,我将控件更改为其他
private void Button_Click(object sender, RoutedEventArgs e)
{
var wb = new WebBrowser();
mvvm.Control = wb;
wb.Navigate("http://stackoverflow.com");
}
您可以在主页中尝试:)创建新的WPF项目并将代码放在上面。您可以在网格中覆盖这两个控件,并从视图模型中切换每个控件的可见性。但这是为了加载另一个用户控件吗?我的目标是用另一个控件替换控件。因此,当有人登录时:替换内容。
readonly MyMVVM mvvm = new MyMVVM();
public MainWindow()
{
InitializeComponent();
DataContext = mvvm;
mvvm.Control = new TextBox() {Text = "this is a text box"};
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var wb = new WebBrowser();
mvvm.Control = wb;
wb.Navigate("http://stackoverflow.com");
}