2

私は初めてWPFのプログラムに取り組んでいます。バインドされたデータセット(データベースから取得されたもの)からのデータを表示するGridViewモードのListViewがあります。

私のデータベースでは、「生年月日」は必須フィールドではありません。そのため、生年月日がないレコードの値はに設定されていDateTime.MinValueます。これらの最小値の日付のそれぞれで、日付はセルに01/01/0001として表示されます。DateTime.MinValueセルが表示されないようにフォーマットするか、それぞれMinValueをに置き換える方法を見つけようとしてい""ます。

私の考えは、日付が含まれているテキストブロックの「Loaded」イベントを使用して「01/01/0001」の各インスタンスを置き換えるか、データセットをループしてGridViewに送信し、そこで削除/置換することでした。私もその方法を理解することができませんでした。

GridViewのxamlコードは次のとおりです。

<Grid>
    <ListView x:Name="resultsListView" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" Margin="0,54,0,28" ItemsSource="{Binding Path=Table}">
    <ListView.View>
    <GridView>
        <GridViewColumn DisplayMemberBinding="{Binding Path=LastName}"
            Header="Last Name" 
            Width="150"/>
        <GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" 
            Header="First Name"
            Width="100"/>
        <GridViewColumn DisplayMemberBinding="{Binding Path=MiddleName}" 
            Header="Middle Name"
            Width="100"/>
        <GridViewColumn Header="Date of Birth" Width="100">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock TextAlignment="Justify" Text="{Binding Path=DateOfBirth, StringFormat='{}{0:MM/dd/yyyy}'}" Loaded="TextBlock_Loaded" />
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
    </ListView.View>
    </ListView>
</Grid>

データセットのコード:

private void FillListView(DataSet ds)
{
    if (resultsListView.Items.Count != 0)
    {
        resultsListView.Items.Clear();
    }
    resultsListView.DataContext = ds.Tables[0].DefaultView;
}

GridViewで空白を表示する方法についてのアドバイスをDateTime.MinValueいただければ幸いです。

4

1 に答える 1

2

私はIValueConverterこれを扱うを作成し、それをバインディング式に含めます。

あなたのリソースで:

<local:DateTimeConverter x:Key="DateTimeConverter" />

次に、バインディングを更新します。

<TextBlock Text="{Binding Path=DateOfBirth, 
                          Converter={StaticResource DateTimeConverter},
                          ConverterParameter='MM/dd/yyyy'}" />

次に、クラスを定義します。

public class DateTimeConverter : IValueConverter

これには2つの方法があります。実装するだけで済みますConvert(双方向バインディングの使用を計画している場合を除く)。このメソッドでは、(上記のバインディング式で渡したように)パラメーターを介してフォーマット文字列を取得しDateTime.MinValue、空白の文字列をチェックして返すこともできます。

于 2009-10-05T20:07:05.047 に答える