来自另一个UserControl的绑定值(两者都利用相同的ViewModel)

时间:2013-09-09 18:44:33

标签: c# wpf xaml mvvm

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

enter image description here

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

更多技术细节:

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

具体问题:

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

    <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>
    

    今天在同一个用户控件(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中设置一个值但是试图避免这种方法。

    非常感谢有关方法和特定代码段的任何见解。

    谢谢

0 个答案:

没有答案