C# 从另一个UserControl绑定值(两者都利用相同的ViewModel)

C# 从另一个UserControl绑定值(两者都利用相同的ViewModel),c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有两个独立的用户控件(不是父子关系),如下所示: 问题陈述:如何将UserControl2中计算的聚合值(动态)传递给UserControl1。两者都利用相同的ViewModel(两者的DataContext都设置为CommonViewModel) 更多技术细节: 聚合值均以XAML计算(使用第三方控件的聚合函数-在本例中为Telerik) 我知道我的ViewModel上应该/将会有公共属性,这些属性将保存这些值(在加载/计算时从UC2设置) 聚合值不显示在UC2中,因此无法使用简单的双向

我有两个独立的用户控件(不是父子关系),如下所示:

问题陈述:如何将UserControl2中计算的聚合值(动态)传递给UserControl1。两者都利用相同的ViewModel(两者的DataContext都设置为CommonViewModel)

更多技术细节:

  • 聚合值均以XAML计算(使用第三方控件的聚合函数-在本例中为Telerik)
  • 我知道我的ViewModel上应该/将会有公共属性,这些属性将保存这些值(在加载/计算时从UC2设置)
  • 聚合值不显示在UC2中,因此无法使用简单的双向绑定模式(用于设置ViewModel上的公共属性)
  • 这不是一个与telerik相关的具体问题
具体问题:

  • 如何在ViewModel中为UC2中未显示的值设置值
  • 这种总体方法正确吗?我使用ViewModel上的公共属性作为存储机制,在2个用户控件中传播值。我没有任何特定的要求在任何时间点将这些值存储到持久性存储(如DB)
  • 编辑-下面是代码片段-

    <telerik:RadGridView
            Name="ABC"
            ItemsSource="{Binding appstats}"
            AutoGenerateColumns="False">
    <telerik:RadGridView.Columns>
                <telerik:GridViewDataColumn
                    DataMemberBinding="{Binding Name}"
                    Header="Name"
                    TextAlignment="Justify"
                    IsFilterable="False">
    
                    <!-- Telerik Count Function to get total number of Names -->
                    <telerik:GridViewDataColumn.AggregateFunctions>
                        <telerik:CountFunction FunctionName="AppCount" />
                    </telerik:GridViewDataColumn.AggregateFunctions>
                    <!--End Region -->
                 </telerik:GridViewDataColumn>
    </telerik:RadGridView.Columns>
    
    
    

    在今天相同的usercontrol(UC2.xaml)中,我执行以下操作:

    <StackPanel Orientation="Horizontal" Margin="10" Grid.Row="0">
            <TextBlock Text="Total number of Names:" />
            <TextBlock Text="{Binding AggregateResults[\AppCount\].FormattedValue, ElementName=ABC}" />
    </StackPanel>
    
    
    
    代码的第二部分是我想转移到UC1的内容。正如下面所建议的(我已经尝试过了)——我可以在这里隐藏这个元素,并让它在VM中设置一个值,但我试图避免这种方法

    非常感谢对方法和特定代码片段的任何见解


    谢谢

    聚合值都是用XAML计算的
    ——这就是问题所在。如果您需要将数据视为
    数据
    并在整个应用程序中共享/访问,则不要将其放在UI级别。正确-但一旦我在XAML中获得一个值-我就不能在我的ViewModel中将其设置为公共属性(从视图到ViewModel的propofate值)。这应该是可能的,对吧?可能是使用自定义DP??我不熟悉Telerik,所以我说不出来,但是是的,您应该能够(使用代码隐藏只是为了将值发送回VM)正确-不希望解决方案特定于Telerik。但是你能告诉我一些文章,其中XAML值(未在UI中显示)被设置回VM中的公共属性。一种方法是在UI中折叠控件,但仍然具有双向绑定-计算(如果不依赖于渲染大小)仍然会发生。如果这不是一个选项,那么保存计算值的控件和(控件的)属性是什么?