WPF DateTimePicker或两个文本框(一个用于日期,一个用于时间)相同的数据库绑定用于显示和处理日期和时间

时间:2017-04-08 19:34:48

标签: c# wpf entity-framework datetime

我有一个日期时间数据库字段。在我的应用程序中,我有两个文本框绑定到该字段。

一个具有字符串格式:date,而另一个具有格式:time。问题是只有当用户更新日期或时间时,其他文本框(日期或时间)才会重置。

我也尝试使用wpf工具包,但我发现很难进行现场更新。

<TextBox Name="txtDate" Text="{Binding Documenti,                                    
               StringFormat=\{0:d\}}" /> 
<TextBox Name="txtTime" Text="{Binding Documenti,
               StringFormat=\{0:hh:mm\}}"/>-->

1 个答案:

答案 0 :(得分:1)

您必须将属性分开才能在setter中应用自定义逻辑,其中更改的部分与未更改的部分合并。

的DataContext

public class MyViewModel : INotifyPropertyChanged
{
    private DateTime _Documenti;
    public DateTime Documenti
    {
        get { return _Documenti; }
        set
        {
            if (_Documenti != value)
            {
                _Documenti = value;
                RaisePropertyChanged("Documenti");
                RaisePropertyChanged("DatePart");
                RaisePropertyChanged("TimePart");
            }
        }
    }

    public DateTime DatePart
    {
        get { return Documenti; }
        set
        {
            Documenti = new DateTime(value.Year, value.Month, value.Day, Documenti.Hour, Documenti.Minute, Documenti.Second);
        }
    }
    public DateTime TimePart
    {
        get { return Documenti; }
        set
        {
            Documenti = new DateTime(Documenti.Year, Documenti.Month, Documenti.Day, value.Hour, value.Minute, value.Second);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void RaisePropertyChanged(string prop)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(prop));
    }
}

XAML

<TextBox Name="txtDate" Text="{Binding DatePart,                                    
       StringFormat=\{0:d\}}" />
<TextBox Name="txtTime" Text="{Binding TimePart,
       StringFormat=\{0:hh:mm\}}" />