【发布时间】: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。