gpt4 book ai didi

Silverlight - 从 DataGrid 列绑定(bind)回 View 模型的根属性?

转载 作者:行者123 更新时间:2023-12-02 00:37:09 27 4
gpt4 key购买 nike

我有以下 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>

所以,基本上我希望将其中一列(复选框列)绑定(bind)到直接位于 ViewModel 上的某个属性 (SomeBooleanProperty),而不是 Items 集合中其中一项的属性。 (是的,这有点做作,但它解决了我的问题。)问题是,根据我的测试,如果您通过 StaticResource 进行绑定(bind),那么该值似乎不会根据 INotifyPropertyChanged 事件触发进行更新。初始值是正确的,但它永远不会改变。我想不出另一种方法来从列绑定(bind)中“脱离”Items 绑定(bind)并返回到 ViewModel。

我认为在 WPF 中,您可以通过使用 FindAncestor 的 RelativeBinding 来完成此操作。但 Silverlight 中不存在该功能。还有其他方法可以实现吗?

最佳答案

元素绑定(bind)不限于“控件”。您可以尝试将元素绑定(bind)到 LayoutRoot,因为它是在运行时仅根据当前范围内的名称解析的。

然后它应该获取您指向的任何元素的 DataContext。

例如

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

如果绑定(bind)仍然没有触发,这将是 CheckBoxColumn 的一个特性/缺陷(例如,它从行数据上下文中获取值)

关于Silverlight - 从 DataGrid 列绑定(bind)回 View 模型的根属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4155939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com