1)在多个视图之间传递数据的最佳方法是什么?
2)我有场景(MVVM C#):
MainWindow 中的 TextBox 和 Button 以及 Window1 中的 TextBlock,在单击按钮时(我正在使用 Icommand),MainWindow 的 TextBox 中的数据必须出现在 Window1 的 TextBlock 中?
视图模型库
public class ViewModelBase
{
public Commandclass commandclass { get; set; }
public ViewModelBase()
{
commandclass = new Commandclass(this);
}
private string fname;
public string vmname
{
get { return fname; }
set { fname = value; }
}
public void OnCommand()
{
Window1 w = new Window1();
/* How to bind ???*/
w.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
命令类.cs
public class Commandclass : ICommand
{
public ViewModelBase vmclass { get; set; }
public Commandclass(ViewModelBase vmb)
{
vmclass = vmb;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
vmclass.OnCommand();
}
}
Run Code Online (Sandbox Code Playgroud)
观看次数
**MainWindow.xaml**
<Window x:Class="Multiwindow.MainWindow"
…
xmlns:vm="clr-namespace:Multiwindow.Viewmodel">
<Window.Resources>
<vm:ViewModelBase x:Key="vmodel"/>
</Window.Resources>
<Grid Background="Gray" DataContext="{StaticResource vmodel}">
<TextBox Height="26" Margin="194,115,154,179" Width="169"
Text="{Binding vmname, Mode=TwoWay}"/>
<Button Content="Button1" HorizontalAlignment="Left"
Margin="251,158,0,0" VerticalAlignment="Top"
Command="{Binding commandclass, Source={StaticResource vmodel}}"/>
</Grid>
</Window>
**Window1.xaml**
<Window.Resources>
<vm:ViewModelBase x:Key="vmodel"/>
</Window.Resources>
<Grid >
<TextBlock FontSize="20" Height="28" Width="169" Foreground="Black"
Background="Bisque" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索并找到了一个项目,但它很复杂,请建议我的 2) 问题的答案会有所帮助..谢谢。
这就是我将如何做到这一点。在调用按钮单击的命令中,我会这样做:
Window2 w= new Window2();
w.DataContext=new Window2ViewModel();
((Window2ViewModel)w.DataContext).TextForTextblock=TextFromTextbox;
w.Show();
Run Code Online (Sandbox Code Playgroud)
编辑
看到您的代码,您可以这样做,因为我认为两个窗口都共享 ViewModelBase:
Window1 w= new Window1();
w.DataContext=this;
w.Show();
Run Code Online (Sandbox Code Playgroud)
您还必须绑定您的 TextBlock:
<TextBlock FontSize="20" Height="28" Width="169" Foreground="Black"
Background="Bisque" Text="{Binding vmname}"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14188 次 |
| 最近记录: |