wpf 4.0 Datagrid Template Column Zwei-Wege-Bindungsproblem

Ich benutze das Datagrid von wpf 4.0. Dies hat eine TemplateColumn mit einem Kontrollkästchen. Die IsChecked-Eigenschaft des Kontrollkästchens wird über die Bindung festgelegt.

Das Problem ist, dass, auch wenn ich den Bindungsmodus explizit als TwoWay spezifiziere, dies nur in eine Richtung funktioniert.

Ich muss erwähnen, dass derselbe Code in .net 3.5 mit dem Datagrid aus dem wpf-Toolkit perfekt funktioniert.

Bitte werfen Sie einen Blick auf die Inhalte von .xaml und .cs.

Danke im Voraus

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>

und der zugehörige .cs-Inhalt:

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage