【问题标题】:Binding a TextBlock property inside Footer control with another property inside DB window user control, but both in the same MainWindow将 Footer 控件中的 TextBlock 属性与 DB 窗口用户控件中的另一个属性绑定,但两者都在同一个 MainWindow 中
【发布时间】:2017-03-31 00:42:05
【问题描述】:

我有一个 WPF 表单在 DataGrid 中显示数据库数据。表单很简单——带有两个用户控件的 MainWindow。第一个用户控件包含 DataGrid,第二个是页脚控件,其中我有一个 TextBlock 显示项目计数。我可以对 DataGrid 应用不同的过滤器,因此项目计数将在运行时更改。

问题是如何将 DBview 控件中的 Items Count 附加到 Footer 控件内 TextBlock 的 Text 属性?

下面是我如何将数据加载到 DataGrid 并计算项目的简短版本:

private int itemsCount;

public string ItemsCount
{
    get { return itemsCount.ToString(); }
    set { itemsCount = Convert.ToInt32(value); }
}

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    context = new MDBEntities();

    mapInfoViewSource = ((CollectionViewSource)(this.FindResource("mapInfoViewSource")));
    IQueryable<MapInfo> mapQuery = GetMapsQuery(context);
    mapInfoViewSource.Source = mapQuery.ToList();

    itemsCount = mapInfoDataGrid.Items.Count;
}

下面是 Footer 控件中的 XAML 代码:

<TextBlock x:Name="DisplayedNum" x:FieldModifier="public" Foreground="#FF569CD6" Margin="10,3,3,0" 
               Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DBviewer}}, Path=ItemsCount}"  />       

另外,我不使用 MVVM,只是背后的代码。我尝试了几种不同的绑定,但 TextBox 保持为空。你能建议一个解决方案吗?谢谢。

【问题讨论】:

  • 仅当控件相互包含时,祖先相对源才有效,请尝试使用 ElementName 引用控件。
  • 谢谢!我尝试了很多不同的组合,但都没有奏效。这两个控件在主窗口中都是可见的,但不能互相看到,因为它们位于“不同的分支”上。所以我必须学习MVVM。

标签: c# wpf datagrid


【解决方案1】:

另外,我不使用 MVVM,只是背后的代码。

这是你的主要问题。 MVVM 是基于 XAML 的 UI 应用程序的推荐设计模式是有原因的,这就是其中之一。

如果您的两个UserControls 共享相同的视图模型,您可以轻松地将TextBlock 绑定到源集合的Count 属性,该属性绑定到另一个控件中的DataGrid

您不能使用RelativeSourceElementName 绑定来绑定到另一个控件的属性,因为它们位于不同的命名范围内。

因此,您要么必须重新设计应用程序(学习并使用 MVVM!),要么必须使用可视化树辅助方法在页脚控件的代码隐藏中以编程方式获取对其他控件的引用。

【讨论】:

  • 感谢您的回答!至少我不会浪费时间尝试做某种绑定。我理解,即使两个用户控件都是同一个主窗口的一部分,它们位于树的不同分支上,而且它们看不到对方。我读了很多关于使用 MVVM 的好处,但没有人提到这一点。而这一点,我认为非常重要。在像这样带有页眉、页脚和主区域用户控件的简单表单中,如果没有公共视图模型类,它们就无法相互通信。再次感谢。
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多