1

DateTimeにバインドされたTextBlockがあるとしましょう。値0001-01-0100:00:00を空の文字列に置き換える方法はありますか?

4

2 に答える 2

3

いくつかのオプションがあります:

  1. ではなくDateTime?(つまり、 )にバインドします。何も表示しない場合は、値を に設定します。Nullable<DateTime>DateTimenull
  2. DateTime.MinValue空の への変換を担当するビュー モデルの別のプロパティにバインドしますstring
  3. DateTime.MinValueDateTime プロパティに直接バインドし、コンバーターを使用して空のに変換しますstring

#1の例

<TextBlock Text="{Binding SomeDateTime}"/>

public class YourViewModel : ViewModel
{
    private DateTime? _someDateTime;

    public DateTime? SomeDateTime
    {
        get { return _someDateTime; }
        set
        {
            if (_someDateTime != value)
            {
                _someDateTime = value;
                OnPropertyChanged("SomeDateTime");
            }
        }
    }
}

#2の例

<TextBlock Text="{Binding SomeDateTimeString}"/>

public class YourViewModel : ViewModel
{
    private DateTime _someDateTime;

    public DateTime SomeDateTime
    {
        get { return _someDateTime; }
        set
        {
            if (_someDateTime != value)
            {
                _someDateTime = value;
                OnPropertyChanged("SomeDateTime");
                OnPropertyChanged("SomeDateTimeString");
            }
        }
    }

    public string SomeDateTimeString
    {
        get { return SomeDateTime == DateTime.MinValue ? "" : SomeDateTime; }
    }
}

#3の例

<!-- in resources -->
<local:DateTimeConverter x:Key="YourConverter"/>

<TextBlock Text="{Binding SomeDateTime, Converter={StaticResource YourConverter}}"/>

public class YourClass
{
    private DateTime _someDateTime;

    public DateTime SomeDateTime
    {
        get { return _someDateTime; }
        set
        {
            if (_someDateTime != value)
            {
                _someDateTime = value;
                OnPropertyChanged("SomeDateTime");
            }
        }
    }
}

public class DateTimeConverter : IValueConverter
{
    public object Convert(object value ...)
    {
        return value == DateTime.MinValue ? "" : value;
    }

    ...
}
于 2009-08-27T13:47:26.517 に答える
1

コンバーターを使用して日付をフォーマットする

コンバーターコード:

public class MyDateConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {    
        DateTime dt = (DateTime)value;
        if (dt == dt.MinValue)
            return "";
        else
            return dt.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {    
        string s = (string)value;
        if (string.IsNullOrEmpty(s))
            return DateTime.MinValue;
        else
            return DateTime.Parse(s);
    }
}

XAML :

...
<Window.Resources>
    <local:MyDateConverter x:Key="dateConverter"/>
</Window.Resources/>

...

<TextBlock Text="{Binding TheDate, Converter={StaticResource dateConverter}}"/>
于 2009-08-27T13:15:07.927 に答える