代码之家  ›  专栏  ›  技术社区  ›  RationalGeek

Silverlight-从DataGrid列绑定回视图模型的根属性?

  •  3
  • RationalGeek  · 技术社区  · 14 年前

    我有以下XAML:

    <UserControl.Resources>
        <local:MainPageViewModel x:Key="ViewModel" />
    </UserControl.Resources>
    
    <Grid x:Name="LayoutRoot" 
          DataContext="{Binding Source={StaticResource ViewModel}}">
        <sdk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}">
            <sdk:DataGrid.Columns>
                <sdk:DataGridTextColumn Header="ID" Binding="{Binding ID}" />
                <sdk:DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <sdk:DataGridCheckBoxColumn
                    Header="Checkbox Column"
                    Binding="{Binding Source={StaticResource ViewModel},
                                      Path=SomeBooleanProperty}"/>
    
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>
    </Grid>
    

    因此,基本上,我希望将其中一列(复选框列)绑定到直接位于ViewModel上的某个属性(someBooleProperty),而不是项集合中某个项的属性。(是的,这有点做作,但这会影响到我的问题。)问题是,根据我的测试,如果您通过staticresource绑定,则该值似乎没有基于inotifyPropertiesChanged事件激发进行更新。初始值是正确的,但不会改变。我无法从列绑定中找到另一种方法来“退出”项绑定并备份到视图模型。

    我认为在WPF中,您可以使用findancestor进行相对绑定。但Silverlight中不存在该功能。还有其他方法来完成这个任务吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   iCollect.it Ltd    14 年前

    元素绑定不限于“控件”。您可以尝试将元素绑定到 懒汉 因为它是在运行时基于当前作用域中的名称进行解析的。

    然后,它应该获取指向它的任何元素的数据上下文。

    <sdk:DataGridCheckBoxColumn
                    Header="Checkbox Column"
                    Binding="{Binding ElementName=LayoutRoot,
                                      Path=SomeBooleanProperty}"/>
    

    如果绑定仍然不触发,则它将是checkboxcolumn的一个特性/缺陷(例如,它从行数据上下文中获取值)。

        2
  •  0
  •   RationalGeek    14 年前

    我真的不知道发生了什么。基于@terencejackson的评论,他说这对他有用,我 完全地 重新构建有问题的页面和VM代码,一切正常。我用非常挑剔的眼光看了看这两段代码,想知道有什么不同,但我做不到。所以尽管这让我很烦,我还是要继续前进。我想我会把这个问题抛在一边,因为有人也有同样的问题,实际上我知道原因是什么。