文本块中的WPF替换值
假设我有一个绑定到日期时间的文本块,有没有办法用空字符串替换0001-01-01 00:00:00的值?使用转换器格式化日期 转换器代码:文本块中的WPF替换值,wpf,textblock,Wpf,Textblock,假设我有一个绑定到日期时间的文本块,有没有办法用空字符串替换0001-01-01 00:00:00的值?使用转换器格式化日期 转换器代码: public class MyDateConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime dt = (D
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);
}
}
...
<Window.Resources>
<local:MyDateConverter x:Key="dateConverter"/>
</Window.Resources/>
...
<TextBlock Text="{Binding TheDate, Converter={StaticResource dateConverter}}"/>
XAML:
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);
}
}
...
<Window.Resources>
<local:MyDateConverter x:Key="dateConverter"/>
</Window.Resources/>
...
<TextBlock Text="{Binding TheDate, Converter={StaticResource dateConverter}}"/>
。。。
...
使用转换器格式化日期
转换器代码:
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);
}
}
...
<Window.Resources>
<local:MyDateConverter x:Key="dateConverter"/>
</Window.Resources/>
...
<TextBlock Text="{Binding TheDate, Converter={StaticResource dateConverter}}"/>
XAML:
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);
}
}
...
<Window.Resources>
<local:MyDateConverter x:Key="dateConverter"/>
</Window.Resources/>
...
<TextBlock Text="{Binding TheDate, Converter={StaticResource dateConverter}}"/>
。。。
...
您有几个选择:
DateTime?
(即null
)而不是DateTime
。如果不想显示任何内容,请将该值设置为null
DateTime.MinValue
转换为空字符串的单独属性
DateTime.MinValue
转换为空的字符串
<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");
}
}
}
}
公共类YourViewModel:ViewModel
{
私人约会时间?\u someDateTime;
公共日期时间?SomeDateTime
{
获取{return\u someDateTime;}
设置
{
if(_someDateTime!=值)
{
_someDateTime=值;
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; }
}
}
公共类YourViewModel:ViewModel
{
私有日期时间_someDateTime;
公共日期时间SomeDateTime
{
获取{return\u someDateTime;}
设置
{
if(_someDateTime!=值)
{
_someDateTime=值;
OnPropertyChanged(“SomeDateTime”);
OnPropertyChanged(“SomeDateTimeString”);
}
}
}
公共字符串SomeDateTimeString
{
获取{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;
}
...
}
公共课你的课
{
私有日期时间_someDateTime;
公共日期时间SomeDateTime
{
获取{return\u someDateTime;}
设置
{
if(_someDateTime!=值)
{
_someDateTime=值;
OnPropertyChanged(“SomeDateTime”);
}
}
}
}
公共类DateTimeConverter:IValueConverter
{
公共对象转换(对象值…)
{
返回值==DateTime.MinValue?”:值;
}
...
}
您有几个选择:
DateTime?
(即null
)而不是DateTime
。如果不想显示任何内容,请将该值设置为null
DateTime.MinValue
转换为空字符串的单独属性
DateTime.MinValue
转换为空的字符串
<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");
}
}
}
}
公共类YourViewModel:ViewModel
{
私人约会时间?\u someDateTime;
公共日期时间?SomeDateTime
{
获取{return\u someDateTime;}
设置
{
if(_someDateTime!=值)
{
_someDateTime=值;
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; }
}
}
公共类YourViewModel:ViewModel
{
私有日期时间_someDateTime;
公共日期时间SomeDateTime
{
获取{return\u someDateTime;}
设置
{
if(_someDateTime!=值)
{
_someDateTime=值;
OnPropertyChanged(“SomeDateTime”);
OnPropertyChanged(“SomeDateTimeString”);
}
}
}
公共字符串SomeDateTimeString
{
获取{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;
}
...
}
公共课你的课
{
私有日期时间_someDateTime;
公共日期时间SomeDateTime
{
获取{return\u someDateTime;}
设置
{
if(_someDateTime!=值)
{
_someDateTime=值;
OnPropertyChanged(“SomeDateTime”);
}
}
}
}
公共类DateTimeConverter:IValueConverter
{
公共对象转换(对象值…)
{
返回值==DateTime.MinValue?”:值;
}
...
}
我将如何在WPF中使用它?请注意,转换回实现是不必要的,因为您绑定到TextBlock.Text,它只能是单向的。是的,您是对的。。。我读(写)“文本块”,但实际上我在想“文本框”)我将如何在WPF中使用它?请注意,转换回实现是不必要的,因为您绑定到TextBlock.Text,它只能是单向的。是的,您是对的。。。我读(写)“文本块”,但实际上我在想“文本框”)我认为您还需要在示例中调用OnPropertyChanged(“SomeDateTimeString”),2我认为您还需要在示例中调用OnPropertyChanged(“SomeDateTimeString”)