如何有条件地将字符串格式应用于 wpf 文本框

本文关键字:应用于 wpf 文本 格式 字符串 有条件 | 更新日期: 2023-09-27 17:59:29

我有一个从DB填充的文本框。DB 值必须是字符串格式,这是由于字符串格式而发生的。可以在用户中更改此值。如果用户以不同的格式编辑值,则字符串格式化程序不应重新设置其格式。

我怎样才能做到这一点?

<TextBox x:Name="txtStartDate" 
         Height="24" Width="80" Padding="0" MaxLength="10" 
         Text="{Binding Path=SelectedDate, StringFormat='ddd, ddMMM',
         RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}"
         />

文本框是实际项目中的自定义控件。

例如数据库发送一个值,因为它被转换为5月30日并显示在文本框中,这是预期的。现在,如果用户将其更改回 May30,则不应将其转换,而应显示 5 月 30 日。实际发生的是该值被格式化回 30 May,因此希望在用户触摸该值后阻止格式化。

如何有条件地将字符串格式应用于 wpf 文本框

编写 WPF 时,最好始终为您的视图/UserControl 和/或Window提供它们所需的确切数据。根据您的要求,我会添加一些额外的属性来简化这个问题。我需要DateTime财产,string财产和bool财产。DateTime属性显然是从DatePicker中获取日期,string属性输出显示的值,bool属性指定是否将字符串格式应用于日期值。你可以尝试这样的事情:

public DateTime Date // Bind with DatePicker
{
    get { return date; }
    set 
    {
        date = value;
        NotifyPropertyChanged("Date");
        IsFormatted = YourLogicHere();
    }
}
public bool IsFormatted { get; set; }
public string DateValue
{
    get { return IsFormatted ? Date.ToString("ddd, ddMMM") : Date.ToString(); }
}

因此,DateValue 属性是 UI 中显示的属性,它将输出默认DateTime值或格式化值,具体取决于 IsFormatted 属性的值。基本思想是将此IsFormatted属性设置为 truefalse ,具体取决于您的要求。

我想你说取决于用户更改值或其他东西,所以当用户更改值时,你可以将其设置为 true,然后它只会输出日期的未格式化版本。您可能需要添加另一个属性或更改此示例中的某些内容来实现您的要求,但您现在应该已经有了这个想法,我相信您将能够从这里完成它。