je le XAML suivant:Silverlight - lier la colonne DataGrid à la propriété racine du modèle de vue?
<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>
Donc, fondamentalement, je veux avoir l'une des colonnes (la colonne de cases à cocher) lié à une propriété (SomeBooleanProperty) qui est directement sur le ViewModel, par opposition à une propriété sur l'un des articles de la collection Items. (Oui, c'est un peu artificiel, mais cela m'amène à mon problème.) Le problème est que d'après mon test, si vous liez via StaticResource, il semble que la valeur ne soit pas mise à jour en fonction du déclenchement de l'événement INotifyPropertyChanged. La valeur initiale est correcte, mais elle ne change jamais. Je ne peux pas trouver un autre moyen de sortir "out" de la liaison d'éléments et de sauvegarder vers le ViewModel, à partir d'une liaison de colonne.
Je pense que dans WPF vous pouvez le faire avec RelativeBinding en utilisant FindAncestor. Mais cette fonctionnalité n'existe pas dans Silverlight. Existe-t-il d'autres moyens d'accomplir cela?
+1 Bonne question! Vous m'avez aussi curieux maintenant. Pourriez-vous simplement vous assurer que le nom de la propriété n'est pas une propriété qui existe dans la source de votre élément? Je pensais que c'est par défaut le modèle de vue si la propriété n'est pas un membre de la source de l'élément. –
Pourriez-vous fournir une partie de votre code source. J'ai essayé exactement votre xaml et cela fonctionne. Peut-être qu'une partie de votre source ViewModel serait utile pour localiser le problème. – TerenceJackson
@TerenceJackson: on dirait que tu as raison. J'ai reconstruit la page et cela a fonctionné. Voir ma réponse ci-dessous. – RationalGeek