【问题标题】:How to count items present in WPF datagrid and display it in another page?如何计算 WPF 数据网格中存在的项目并将其显示在另一个页面中?
【发布时间】:2015-02-07 08:25:12
【问题描述】:

我正在使用 MVVM 模型在 C# WPF 应用程序中工作。我有一个 DataGrid,我在其中添加多个值,我想计算网格中存在的项目数并将该值显示在另一个页面中。问题是计数显示在我拥有 DataGrid 的同一页面上,但未在另一页面上显示计数。

我的代码如下:

public ObservableCollection<VLANSPropertyClass> vlan { get; set; }   

<TextBlock Margin="3,0"  
           Style="{StaticResource SummaryValues}"  
           Text="{Binding vlan.Count}"
          />

如何在不同的页面上显示 DataGrid 的项目数?

【问题讨论】:

  • 这两个页​​面是否有相同的DataContext?
  • 你难道不是两个页面都拥有相同的 ViewModel!
  • 所以如果你想让这个表达式在两个页面中工作,两个页面必须引用相同的DataContext。
  • @RezaArabQaeni 对不起,DataContext 是一样的!!
  • 如果两个页面具有相同的 DataContext,那么从第二个视图查看时,您是否检查过您的 vlan 属性实际上是否包含数据?

标签: c# wpf mvvm datagrid observablecollection


【解决方案1】:

使您的 ViewModel 成为单个实例。即。

public class ViewModel
{
    private static ViewModel instance = new ViewModel();

    private ViewModel()
    {

    }

    public static ViewModel Instance
    {
        get
        {
            if (instance == null)
                instance = new ViewModel();
            return instance;
        }
    }

    public ObservableCollection<string> vlan { get; set; }
}

然后您可以在您的第一个窗口中,将 DataContext 设置为 ViewModel.Instance,即。

public MainWindow()
    {
        InitializeComponent();
        this.DataContext = ViewModel.Instance;
        ViewModel.Instance.vlan=new ObservableCollection<string> { "Fred", "Theo", "Lil Kitty" };
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ViewModel.Instance.vlan.Add(String.Format("String {0}", ViewModel.Instance.vlan.Count + 1));

        Window1 win = new Window1();
        win.Show();
    }

然后你可以有另一个窗口,也将 DataContext 设置为 ViewModel.Instance,即:

public Window1()
    {
        InitializeComponent();
        this.DataContext = ViewModel.Instance;
    }

这将允许您将两个窗口设置为 ViewModel 的相同实例,并且您仍然可以在每个窗口中像这样绑定(我的示例每次都会创建一个新窗口并更新所有窗口中的计数等):

<TextBlock Text="{Binding vlan.Count}" />

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多