0

ウィンドウ内には、dateTimePicker 列と textbox 列を持つ単純なデータグリッド コントロールがあります。dateTimePicker から派生した月と年の文字列でデータグリッド内の行をグループ化します。列とグループ化の xaml は次のとおりです.....

                <DataGridTemplateColumn Header="Date" Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <xctk:DateTimePicker IsEnabled="True" Format="Custom" FormatString="M/d/yyyy h:mm" Value="{Binding theDate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Text" Width="150">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox TextWrapping="Wrap" AcceptsReturn="True" MaxLines="2" VerticalScrollBarVisibility="Auto" MaxLength="150" Text="{Binding theText, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Name}" FontWeight="Bold" Padding="3"/>
                        </StackPanel>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </DataGrid.GroupStyle>

テキスト文字列、datetimepicker datetime、および動的に作成する月-年の文字列を含む非常に単純なクラスがあります。クラスのC#コードは次のとおりです...

public DateTime dueDate { get; set; }
public String task { get; set; }

private String _monthYear;
public String monthYear
{
    get { return dueDate.Month.ToString() + " - " + dueDate.Year.ToString(); }
}

これがグループ化の初期化です

myCollectionView = CollectionViewSource.GetDefaultView(myObservableCollectionList);
myCollectionView.GroupDescriptions.Add(new PropertyGroupDescription("monthYear"));

MyDataGrid.ItemsSource = myCollectionView;
// In this case, myObservableCollectionList is an observable collection that holds the datagrid 
// rows. myCollectionView is an ICollectionView object

非常に厄介な予期しない動作を除いて、すべてが正常に機能しています。これが拡張 WPF ツールキットの DateTimePicker コントロールのバグかどうかはわかりません。

DateTimePicker コントロールで月または年を変更し、新しい行または同じ行の別の列をクリックすると、日付を変更した行はグループ化されませんが、変更するまで古い月-年の日付グループ内に残ります。それを並べ替えます。ただし、一貫していれば、この動作は問題ありません...

DateTimePicker コントロールの月または年を変更し、同じ DateTimePicker コントロールをタブで移動するかクリックして (何も変更しない)、新しい行をクリックすると、古い行が新しい月にグループ化されます。年カテゴリ。

よくわかりませんが、これは DateTimePicker コントロールのバグで、日付を変更しなくてもコントロールをタブで移動すると何らかのイベントが呼び出されるように感じます。しかし、今私はかなり混乱しており、なぜこれが起こっているのかについて誰かが何か洞察を持っているかどうか疑問に思っていました.

*** INotifyPropertyChanged を使用した場合と使用しない場合でこれをテストしました。実装されたインターフェイスがあり、実装されている場合と実装されていない場合の動作が発生します。簡単にするために省略したいと思います。

どんな助けでも大歓迎ですありがとう!

4

1 に答える 1