DateTimeにバインドされたTextBlockがあるとしましょう。値0001-01-0100:00:00を空の文字列に置き換える方法はありますか?
1839 次
2 に答える
3
いくつかのオプションがあります:
- ではなく
DateTime?
(つまり、 )にバインドします。何も表示しない場合は、値を に設定します。Nullable<DateTime>
DateTime
null
DateTime.MinValue
空の への変換を担当するビュー モデルの別のプロパティにバインドしますstring
。DateTime.MinValue
DateTime プロパティに直接バインドし、コンバーターを使用して空のに変換します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 に答える