文本块中的WPF替换值

文本块中的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

假设我有一个绑定到日期时间的文本块,有没有办法用空字符串替换0001-01-01 00:00:00的值?

使用转换器格式化日期

转换器代码:

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属性,并使用转换器将
    DateTime.MinValue
    转换为空的
    字符串
  • #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");
                }
            }
        }
    }
    
    
    公共类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属性,并使用转换器将
    DateTime.MinValue
    转换为空的
    字符串
  • #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");
                }
            }
        }
    }
    
    
    公共类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”)