如何在XAML用户界面中更新网格?

和彼得罗夫

我正在使用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();
     }
}

我可以访问它,但最后得到两个MainWindows。

如果将方法的定义更改为addData()public static void addData()可以从外部类(DataEntry访问,但随后无法TextBox从该addData()方法访问我方法。

15ee8f99-57ff-4f92-890c-b56153

这是一个合理的直观假设,说明您的操作方式,并且在许多环境中都是正确的,但在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 C++ 中制作实时更新网格

来自分类Dev

如何在Android中隐藏用户界面

来自分类Dev

如何在Android中隐藏用户界面

来自分类Dev

如何在Flutter中更新网络映像

来自分类Dev

自定义ColumnChooser,如何在保存时更新网格

来自分类Dev

Sencha Extjs-如何通过一次设置记录中的数据来更新网格?

来自分类Dev

当第一个网格项目为固定宽度时,如何在“材质”用户界面中左右对齐两个网格项目?

来自分类Dev

如何允许用户更改XAML数据网格中的值?

来自分类Dev

如何更新网格线的线坐标?

来自分类Dev

操作 uwp c# 更新网格中的位置

来自分类Dev

沿曲线更新网格

来自分类Dev

使用 NotifyChange 更新网格

来自分类Dev

如何在创建新网格之前销毁gridstack?

来自分类Dev

如何在Debian中设置默认的用户界面语言?

来自分类Dev

如何在语义用户界面中制作占位符?

来自分类Dev

如何在 CN1 中创建此用户界面?

来自分类Dev

在材料用户界面中,如何将按钮放在网格项目中间?

来自分类Dev

C#+ XAML-更改后用户界面未更新

来自分类Dev

材质用户界面-反应-将网格项放置在列中

来自分类Dev

材质用户界面:网格不会将选择放置在行中

来自分类Dev

Edgeshelper不更新网格的位置

来自分类Dev

Android:如何在用户界面中保持领域列表的更新

来自分类Dev

C1FlexGrid-在基础IEnumerable更改值时如何从BindingSource更新网格

来自分类Dev

如何使用 ExtJs 从警报窗口更新网格上的一行?

来自分类Dev

extjs更新网格中所有行中的列的值

来自分类Dev

更新网格或从场景中删除和添加更具成本效益的是什么?

来自分类Dev

使用复选框更新网格中的项目 - ionic 2

来自分类Dev

在 Babylon.JS 中更新网格位置时触发事件

来自分类Dev

AsyncTask用户界面更新

Related 相关文章

  1. 1

    如何在 C++ 中制作实时更新网格

  2. 2

    如何在Android中隐藏用户界面

  3. 3

    如何在Android中隐藏用户界面

  4. 4

    如何在Flutter中更新网络映像

  5. 5

    自定义ColumnChooser,如何在保存时更新网格

  6. 6

    Sencha Extjs-如何通过一次设置记录中的数据来更新网格?

  7. 7

    当第一个网格项目为固定宽度时,如何在“材质”用户界面中左右对齐两个网格项目?

  8. 8

    如何允许用户更改XAML数据网格中的值?

  9. 9

    如何更新网格线的线坐标?

  10. 10

    操作 uwp c# 更新网格中的位置

  11. 11

    沿曲线更新网格

  12. 12

    使用 NotifyChange 更新网格

  13. 13

    如何在创建新网格之前销毁gridstack?

  14. 14

    如何在Debian中设置默认的用户界面语言?

  15. 15

    如何在语义用户界面中制作占位符?

  16. 16

    如何在 CN1 中创建此用户界面?

  17. 17

    在材料用户界面中,如何将按钮放在网格项目中间?

  18. 18

    C#+ XAML-更改后用户界面未更新

  19. 19

    材质用户界面-反应-将网格项放置在列中

  20. 20

    材质用户界面:网格不会将选择放置在行中

  21. 21

    Edgeshelper不更新网格的位置

  22. 22

    Android:如何在用户界面中保持领域列表的更新

  23. 23

    C1FlexGrid-在基础IEnumerable更改值时如何从BindingSource更新网格

  24. 24

    如何使用 ExtJs 从警报窗口更新网格上的一行?

  25. 25

    extjs更新网格中所有行中的列的值

  26. 26

    更新网格或从场景中删除和添加更具成本效益的是什么?

  27. 27

    使用复选框更新网格中的项目 - ionic 2

  28. 28

    在 Babylon.JS 中更新网格位置时触发事件

  29. 29

    AsyncTask用户界面更新

热门标签

归档