C# 在新窗口中使用现有类中的元素
在我的C#WPF项目(使用VS2012)中,我的目标是在我创建的新窗口中使用类中的现有数据 因此,我在我的项目中添加了一个新窗口(WPF),并将其命名为Dijkstrowindow。在我的主窗口中有一个菜单,当您单击合适的项目时,DijkstraWindow将打开。在my MainWindow.xaml.cs中,这是执行此操作的代码:C# 在新窗口中使用现有类中的元素,c#,wpf,xaml,C#,Wpf,Xaml,在我的C#WPF项目(使用VS2012)中,我的目标是在我创建的新窗口中使用类中的现有数据 因此,我在我的项目中添加了一个新窗口(WPF),并将其命名为Dijkstrowindow。在我的主窗口中有一个菜单,当您单击合适的项目时,DijkstraWindow将打开。在my MainWindow.xaml.cs中,这是执行此操作的代码: private void Dijkstra_Click(object sender, RoutedEventArgs e) { var DWindow
private void Dijkstra_Click(object sender, RoutedEventArgs e)
{
var DWindow = new DijkstraWindow();
DWindow.Show();
}
现在我需要访问数据(在应用程序运行时创建的),这些数据存储在一个类中存储的列表中。但我不知道怎么做
我尝试了以下方法:
public class FooView : Window
{
//require data from the parentview to the child view through dependency injection.
//very simplistic, might meet your needs. If you need a full view lifecycle, see MVVM frameworks like
//cliburn.micro
public FooView(INavigationData navigationData)
{
//do something with your data.
}
}
一,
在Dijkstrowindow中创建新对象:
var mwvm = new MainWindowViewModel();
数据是可访问的(在我的新dijkstrowindow中),但它只获取启动应用程序时初始化的数据。所以这是错误的方法。因为在应用程序运行时,有一个填充的列表。我想在新窗口中使用此数据
二,
在DijkstraWindow.xaml.cs中,我试图从我的数据所在的类继承,但编译器却在抱怨
“部分声明不能指定不同的基类”
因此,我了解到您还必须更改您的xaml文件,因此将其更改为:
<local:MainWindowViewModel x:Class="Graphomat.DijkstraWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Graphomat"
Title="DijkstraWindow" Height="300" Width="300">
<Grid/>
</local:MainWindowViewModel>
这也不起作用,那么我的Dijkstrowindow没有关于show方法的信息吗
有人能帮我解决这个问题吗
谢谢大家!
编辑
下面是类声明:
*/using somestuff */
namespace Graphomat
{
/// <summary>
/// Interaction logic for DijkstraWindow.xaml
/// </summary>
public partial class DijkstraWindow : MainWindowViewModel
{
public DijkstraWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
}
*/使用一些东西*/
名称空间图形
{
///
///dijkdow.xaml的交互逻辑
///
公共部分类Dijkstrowindow:MainWindowViewModel
{
公共dijkindow()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
}
}
}
试图从类“MainWindowViewModel”继承,但这不起作用,因为xaml文件..编译器正在抱怨,因为您的视图的类型
Graphomat.DijkstraWindow
在xaml和.cs文件之间没有声明相同的基类型。您的cs文件可能表示它继承自窗口
类型
在ViewModels之间传输数据的一种方法是依赖项注入。考虑以下事项:
public class FooView : Window
{
//require data from the parentview to the child view through dependency injection.
//very simplistic, might meet your needs. If you need a full view lifecycle, see MVVM frameworks like
//cliburn.micro
public FooView(INavigationData navigationData)
{
//do something with your data.
}
}
对项目中的所有视图模型使用基类是非常常见的。考虑到您将所有视图绑定到各个视图模型,只需在基类上创建IntIfyPrimTyType的基本实现就有意义:
public class MainViewModel : BaseViewModel
{
}
public abstract class BaseViewModel : INotifyPropertyChanged
{
public object Model { get; set; }
#region PropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if(handler != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
#region Commands
public ICommand OpenFooWindowClicked
{
get
{
//implement your ICommand here... beyond the scope of the question.
}
}
#endregion
}
就类问题而言,如果您遵循典型的MVVM命名约定,那么看起来您正在尝试用xaml定义ViewModel。虽然这并非闻所未闻,但您可能希望在xaml中定义视图
请检查SO问题:该线程中链接的教程应该让您了解成功执行MVVM模式的关键概念。感谢您的详细评论。我觉得这样做比较容易。在阅读教程时,似乎有必要重新构造我的整个应用程序。目前我不确定我的视图、模型或模型视图是什么,我的代码与所有内容都混淆了。。。