我正在使用C#WPF,VS2013。
这是我的MainWindow
班级定义:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public void addData(){
//this is the method I want to access
}
...
}
我想使用addData
另一个类中的方法。理论上应该是这样的:
public class DataEntry
{
public void randomMethod()
{
MainWindow.addData(); //this doesn't work - the addData method can not be accessed
}
}
如果我这样做:
public class DataEntry
{
public void randomMethod()
{
MainWindow mw = new MainWindow()
mw.addData();
}
}
我可以访问它,但最后得到两个MainWindow
s。
如果将方法的定义更改为addData()
,public static void addData()
则可以从外部类(DataEntry
)访问它,但随后无法TextBox
从该addData()
方法访问我的方法。
这是一个合理的直观假设,说明您的操作方式,并且在许多环境中都是正确的,但在XAML中却不正确。在XAML中,您做的事情非常不同:将数据放在网格知道如何检查的东西中,将其显示给网格,然后网格处理填充自身的详细信息。
它是声明性的。您说出您想要的内容:“我希望这些东西在表格中”。让网格摆弄i
第百万次增量。
网格中的数据应该在ObservableCollection中(我们将其称为GridItems),该数据应该是视图模型类的公共属性。如果您没有视图模型,那么是时候编写一个视图模型了-我们将其称为MainWindowViewModel。它不一定必须要做很多事情。这就是数据所在的地方,以及加载和保存数据的功能。视图-您的MainWindow-负责向用户显示数据,并公开菜单项或按钮以进行加载和保存等。但是MainWindow只是公开那些控件,并将它们绑定到由视图模型公开的Commands。MainWindow知道命令的名称,但是他不知道命令的含义。
MainWindowViewModel实例被分配给MainWindow.DataContext。DataGrid的ItemsSource属性应绑定到GridItems。
<DataGrid ItemsSource="{Binding GridItems}" ...>
<!-- columns, etc. -->
</DataGrid>
当有人在viewmodel.GridItems上添加或删除项目时,将通知网格并相应地更新自身。
这是在XAML中完成工作的标准方式,一旦习惯了,它就非常漂亮。
对于视图模型来说,显示事物列表很容易:只需使用ObservableCollection。对于非列表属性,您需要从INotifyPropertyChanged继承视图模型类,并实现该接口(有关此信息,请参见Google,没什么大不了的)。假设您的视图模型中具有CurrentFileName属性...
private String _currentFileName;
public String CurrentFileName {
get { return _currentFileName; }
set {
_currentFileName = value;
// If you've implemented this properly, this will send out a
// notification that this property has changed. Any binding
// in MainWindow that's bound to this property will get that
// and act on it.
OnPropertyChanged("CurrentFileName");
}
}
另外,我想同意一个教程是一个好主意,如果您不熟悉编程,那么创建MainWindow的新实例似乎是更新旧实例的一种可行方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句