J'utilise le DataGrid de wpf 4.0. Cela a un TemplateColumn contenant une case à cocher. La propriété IsChecked de la case à cocher est définie via la liaison.wpf 4.0 problème de liaison bidirectionnelle de colonne de modèle de données de données
Le problème est que même si je spécifie explicitement que le mode de liaison est TwoWay, cela ne fonctionne que dans un seul sens.
Je dois mentionner que le même code fonctionne parfaitement dans .net 3.5 avec le DataGrid de la boîte à outils wpf.
Veuillez jeter un coup d'œil aux contenus .xaml et .cs.
Merci à l'avance,
Roland
<Window.Resources>
<DataTemplate
x:Key="IsSelectedColumnTemplate">
<CheckBox
IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"
/>
</DataTemplate>
</Window.Resources>
<Grid>
<DataGrid
x:Name="dataGrid"
AutoGenerateColumns="false"
CanUserAddRows="False"
CanUserDeleteRows="False"
HeadersVisibility="Column"
ItemsSource="{Binding}"
>
<DataGrid.Columns>
<DataGridTemplateColumn
Header="Preselected"
x:Name="myIsSelectedColumn"
CellTemplate="{StaticResource IsSelectedColumnTemplate}"
CanUserSort="True"
SortMemberPath="Orientation"
Width="Auto"
/>
</DataGrid.Columns>
</DataGrid>
</Grid>
et le contenu .cs connexe:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<DataObject> DataSource = new ObservableCollection<DataObject>();
DataSource.Add(new DataObject());
DataSource.Add(new DataObject());
dataGrid.ItemsSource = DataSource;
}
}
public class DataObject : DependencyObject
{
public bool IsSelected
{
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
// Using a DependencyProperty as the backing store for IsSelected. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsSelectedProperty =
DependencyProperty.Register("IsSelected", typeof(bool), typeof(DataObject), new UIPropertyMetadata(false, OnIsSelectedChanged));
private static void OnIsSelectedChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
// this part is not reached
}
}
Cela fonctionne très bien, mais cela ne fonctionne pas comme prévu. Lorsque vous tapez une lettre, l'objet est immédiatement modifié. Que se passe-t-il si vous avez un déclencheur qui déclenche le gestionnaire de validation? cela signifie qu'il tire 1000 fois si vous tapez 1000 symboles? Ça n'est pas correct. – Dilshod
Cela peut être une solution acceptable, en suivant l'événement LostFocus. –
Vincent
@Dilshod Qu'entendez-vous par là qu'il se déclenchera 1000 fois si l'on tape 1000 symboles? nous parlons d'une case à cocher, non? –