WPF Toolkit DataGrid-Checkbox-Fragen

Ich hoffe wirklich, dass mir jemand helfen kann hier. Ich habe ein DataGrid in meinem Programm, das mit einer checkbox-Spalte. Die ItemsSource für das DataGrid wird ein DataSet geladen programmgesteuert. Wenn ich wählen Sie ein paar Artikel im DataGrid, und dann Blättern Sie es, bekomme ich etwas sehr merkwürdiges Verhalten. Zum Beispiel, wenn ich zwei Checkboxen, es sagt mir, dass ich "2 " ausgewählt", aber dann, wenn ich nach oben oder unten scrollen im DataGrid ändert sich die Zahl. Wenn ich gehe in die Ausgangsstellung zurück geht es wieder an die "2 " ausgewählt". So seltsam es klingt, es scheint, wie es die Berufung der Checked/Unchecked Ereignisse, wenn ich scrollen der Kästchen...sehr seltsam...

Habe ich Folgendes definiert an der Spitze von meinem code:

private DataSet MyDataSet;
int selected_count = 0;

Dann habe ich folgenden code in meiner Methode zum laden der Daten in die DataSet:

MyDataSet = new DataSet();
DataTable tempDataTable = new DataTable();
MyDataSet.Tables.Add(tempDataTable);

DataColumn tempCol = new DataColumn("Checked", typeof(bool));
tempDataTable.Columns.Add(tempCol);

for (int i = 0; i < 50; i++)
{
    DataRow tempRow = tempDataTable.NewRow();
    tempDataTable.Rows.Add(tempRow);
    tempRow["Checked"] = false;
}

MyList.ItemsSource = MyDataSet.Tables[0].DefaultView;

Habe ich die IsChecked-Eigenschaft gebunden an die DataColumn mit dem Namen "Checked" mit dem folgenden XAML-Code:

<dtgrd:DataGrid x:Name="MyList" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" HeadersVisibility="Column" SelectionUnit="FullRow" HorizontalGridLinesBrush="#FF688CAF" VerticalGridLinesBrush="#FF688CAF">
    <dtgrd:DataGrid.Columns>
        <dtgrd:DataGridTemplateColumn x:Name="CheckCol" CanUserSort="True" CanUserResize="False">
            <dtgrd:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox Name="MyCheckBox" IsChecked="{Binding Checked}" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="MyCheckBox_Checked" Unchecked="MyCheckBox_Unchecked" />
                </DataTemplate>
            </dtgrd:DataGridTemplateColumn.CellTemplate>
        </dtgrd:DataGridTemplateColumn>
    </dtgrd:DataGrid.Columns>
</dtgrd:DataGrid>

Dann habe ich die folgenden Ereignisse, die aufgerufen werden, durch aktivieren/deaktivieren einer der Checkboxen:

private void MyCheckBox_Checked(object sender, RoutedEventArgs e)
{
    selected_count++;
    TxtSelectedCount.Text = "" + selected_count + " selected";
}

private void MyCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
    selected_count--;
    TxtSelectedCount.Text = "" + selected_count + " selected";
}

Ich habe auch versucht, andere Dinge, aber verschiedene bugs. Zum Beispiel habe ich entfernt, die Bindung aus der XAML-code und versucht es programmgesteuert mithilfe der folgenden Geprüft/Deaktivieren Veranstaltungen:

private void MyCheckBox_Checked(object sender, RoutedEventArgs e)
{
    DataRow tempRow = MyDataSet.Tables[0].Rows[MyList.Items.IndexOf(MyList.SelectedItems[0])];
    tempRow["Checked"] = true;

    selected_count++;
    TxtSelectedCount.Text = "" + selected_count + " selected";
}

private void MyCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
    DataRow tempRow = MyDataSet.Tables[0].Rows[MyList.Items.IndexOf(MyList.SelectedItems[0])];
    tempRow["Checked"] = false;

    selected_count--;
    TxtSelectedCount.Text = "" + selected_count + " selected";
}

Wenn ich diesen code, die Anzahl der aktivierten Elemente bleibt gleich, aber die eigentlichen Prüfungen bewegen sich auf verschiedenen Positionen während ich scrollen.

Ich habe ehrlich gesagt keine Ahnung, was Los ist, aber es ist sehr frustrierend! Jede Hilfe wäre SEHR geschätzt werden!

InformationsquelleAutor Randy Cleary | 2010-08-16
Schreibe einen Kommentar