2013-05-15 5 views
6

Come faccio a livello di codice fare quanto segue (dal XAML):Come impostare in modo programmatico l'associazione di una casella di testo con stringformat?

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

public DateTime OrderDate 

In questo momento ho il seguente

TextBox txtboxOrderdDate = new TextBox(); 

E so che ho bisogno di fare qualcosa di simile

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

Ma io sono bloccato qui ... non so come procedere per applicare StringFormat né sono sicuro che SOURCE sia il modo corretto (dovrei usare ElementName?)

+0

controllo questo http://stackoverflow.com/questions/3099048/wpf-binding-and-dynamically-assigning-stringformat-property –

+0

Sia 'OrderDate' è un DatePicker? –

+0

Dove è definita la proprietà 'OrderDate'? – Clemens

risposta

8

Lascia il MainWindow essere il nome della classe. Modifica il codice MainWindow nel seguente codice al nome della classe.

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); 


} 
+1

public DateTime OrderDate – JSchwartz

0

Hai provato a impostare la proprietà StringFormat di bindingOrderDate nel formato corretto? È così che dovrebbe funzionare, secondo MSDN.

-1

Definire una proprietà di tipo DateTime nel codice dietro e quindi eseguire il binding.

Si prega di fare riferimento a questo link.

-2
 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] 
Problemi correlati