代码之家  ›  专栏  ›  技术社区  ›  Gabe

绑定空值

  •  0
  • Gabe  · 技术社区  · 15 年前

    DatePicker 在Silverlight?

    下面是我的示例XAML

    <UserControl x:Class="ValidationExamples.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:ig="http://schemas.infragistics.com/xaml" 
        xmlns:controls='clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls'
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
    
        <Grid x:Name="LayoutRoot" Background="White">
            <StackPanel>
                <controls:DatePicker Height="20" Width="100"  x:Name="DatePicker" SelectedDate="{Binding Path=DOB, Mode=TwoWay}"/>
                <Button Height="20" Width="100" Click="Button_Click" Content="Break"/>
            </StackPanel>
        </Grid>
    </UserControl>
    

    代码隐藏:

    public partial class MainPage : UserControl
    {
        private Model MyModel;
    
        public MainPage()
        {
            InitializeComponent();
            this.MyModel = new Model();
            this.MyModel.DOB = DateTime.Now;
            this.DataContext = this.MyModel;
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
              // Empty on purpose
        }
    }
    

    Nullable<DateTime> 和 DateTime

    public class Model : INotifyPropertyChanged
    {
        private Nullable<DateTime> dob;
        public Nullable<DateTime> DOB
        {
            get
            {
                return this.dob;
            }
            set
            {
                this.dob = value;
                NotifyPropertyChanged("DOB");
            }
        }
    
        //private DateTime dob;
        //public DateTime DOB
        //{
        //    get
        //    {
        //        return this.dob;
        //    }
        //    set
        //    {
        //        this.dob = value;
        //        NotifyPropertyChanged("DOB");
        //    }
        //}
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void NotifyPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    }
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   Mark Heath    15 年前

    你难道不应该 SelectedDate 财产 DatePicker Text ?

        2
  •  0
  •   Gabe    15 年前

    我面临的问题是 ConvertBack PropertyChanged 从未被解雇。

    我还将日期控件更改为绑定到 SelectedDate 而不是 Text 马克·希思 建议。

    更新的Xaml

    <controls:DatePicker Height="20" Width="100"  x:Name="DatePicker" SelectedDate="{Binding Path=DOB, Mode=TwoWay, Converter={StaticResource DateConverter}}"/>
    

    public class DateConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DateTime? result = null;
            DateTime result2;
    
            if (value != null)
            {
                if (!String.IsNullOrEmpty(value.ToString()))
                {
                    if (DateTime.TryParse(value.ToString(), out result2))
                    {
                        return result2;
                    }
                }
            }
    
            return result;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DateTime? result = null;
            DateTime result2;
    
            if (value != null)
            {
                if (!String.IsNullOrEmpty(value.ToString()))
                {
                    if (DateTime.TryParse(value.ToString(), out result2))
                    {
                        return result2;
                    }
                }
            }
    
            return result;
        }
    }