【问题标题】:How to programatically set the binding of a textbox with stringformat?如何以编程方式设置文本框与字符串格式的绑定?
【发布时间】:2013-05-15 05:59:44
【问题描述】:

我如何以编程方式执行以下操作(来自 XAML):

<TextBox Name="OrderDateText"
         Text="{Binding Path=OrderDate, StringFormat=dd-MM-yyyy}"

public DateTime OrderDate

现在我有以下内容

TextBox txtboxOrderdDate = new TextBox();

我知道我需要做类似的事情

  Binding bindingOrderDate = new Binding();
  bindingOrderDate.Source = "OrderDate";

但我被困在这里......不确定如何继续应用 StringFormat,也不确定 SOURCE 是正确的方式(我应该使用 ElementName 吗?)

【问题讨论】:

标签: c# wpf textbox


【解决方案1】:

MainWindow 成为类名。将以下代码中的MainWindow 更改为您的类名。

public DateTime OrderDate
{
    get { return (DateTime) GetValue(OrderDateProperty); }
    set { SetValue(OrderDateProperty, value); }
}

public static readonly DependencyProperty OrderDateProperty =
    DependencyProperty.Register("OrderDate",
                                typeof (DateTime),  
                                typeof (MainWindow),
                                new PropertyMetadata(DateTime.Now, // Default value for the property
                                                     new PropertyChangedCallback(OnOrderDateChanged)));

private static void OnOrderDateChanged(object sender, DependencyPropertyChangedEventArgs args)
{
    MainWindow source = (MainWindow) sender;

    // Add Handling Code
    DateTime newValue = (DateTime) args.NewValue;
}

public MainWindow()
{
    InitializeComponent();

    OrderDateText.DataContext = this;
    var binding = new Binding("OrderDate")
        {
            StringFormat = "dd-MM-yyyy"
        };
    OrderDateText.SetBinding(TextBox.TextProperty, binding);

    //Testing
    OrderDate = DateTime.Now.AddDays(2);


}

【讨论】:

    【解决方案2】:

    您是否尝试过将bindingOrderDateStringFormat 属性设置为正确的格式?根据 MSDN,它应该是这样工作的。

    【讨论】:

      【解决方案3】:

      在后面的代码中定义DateTime 类型的属性,然后绑定。

      请参考这个link

      【讨论】:

        【解决方案4】:
         Object data = new Object();
        
                    TextBox txtboxOrderdDate = new TextBox();
                    Binding bindingOrderDate = new Binding("Order Date", data, "OrderDate");
                    bindingOrderDate.Format += new ConvertEventHandler(DecimalToCurrencyString);
                    txtboxOrderdDate.DataBindings.Add(bindingOrderDate);
        
           private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
                {
        
                    if (cevent.DesiredType != typeof(string)) return;
        
                    cevent.Value = ((decimal)cevent.Value).ToString("dd-MM-yyyy");
                }
        
        
        //[For more information check MSDN][1]
        

        【讨论】:

          猜你喜欢
          • 2011-05-02
          • 2018-11-25
          • 2021-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-30
          相关资源
          最近更新 更多