Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Footer控件内的TextBlock属性与DB window用户控件内的另一个属性绑定,但两者都在同一主窗口中_C#_Wpf_Datagrid - Fatal编程技术网

C# 将Footer控件内的TextBlock属性与DB window用户控件内的另一个属性绑定,但两者都在同一主窗口中

C# 将Footer控件内的TextBlock属性与DB window用户控件内的另一个属性绑定,但两者都在同一主窗口中,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个WPF表单,在DataGrid中显示DB数据。表单很简单–主窗口有两个用户控件。第一个用户控件包含DataGrid,第二个是footer控件,其中有一个TextBlock显示项目数。我可以对DataGrid应用不同的过滤器,因此项目计数将在运行时更改 问题是如何将DBview控件中的Items Count附加到Footer控件中TextBlock的Text属性 下面是我如何将数据加载到DataGrid以及如何计算项目的简短版本: private int itemsCount; publ

我有一个WPF表单,在DataGrid中显示DB数据。表单很简单–主窗口有两个用户控件。第一个用户控件包含DataGrid,第二个是footer控件,其中有一个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;
}
private int itemsont;
公共字符串项
{
获取{return itemsCount.ToString();}
设置{itemscont=Convert.ToInt32(值);}
}
已加载私有void UserControl_(对象发送方,RoutedEventArgs e)
{
context=新的mdbenties();
MapInfo ViewSource=((CollectionViewSource)(this.FindResource(“MapInfo ViewSource”));
IQueryable mapQuery=GetMapsQuery(上下文);
MapInfo ViewSource.Source=mapQuery.ToList();
ItemScont=MapInfo数据网格.Items.Count;
}
下面是页脚控件中的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,只是一个代码隐藏。我尝试了几种不同的绑定,但文本框保持为空。你能提出一个解决方案吗?谢谢

另外,我不使用MVVM,只是一个代码隐藏

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

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

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


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

祖先相对源仅在控件彼此包含时才起作用,尝试使用ElementName引用控件。谢谢!我试过很多不同的组合,但都不管用。这两个控件都可以从主窗口看到,但不能相互看到,因为它们位于“不同的分支”上。所以我必须学习MVVM。谢谢你的回答!至少我不会浪费时间去做一些绑定。我明白了,即使两个用户控件都是同一个主窗口的一部分,它们位于树的不同分支上,并且它们彼此看不见。我读了很多关于使用MVVM的好处的书,但是没有人提到这一点。我认为这一点非常重要。在这种带有页眉、页脚和主区域用户控件的简单表单中,如果没有公共视图模型类,它们就无法相互通信。再次感谢。