2015-12-16 27 views
1

這是WPF新手的一個非常基本的問題。 我有一些窗體,例如TextBoxes,DatePickers等控件。 在一個典型的Windows窗體,我會設置默認值,這些在onFormLoad事件像WPF非常初學者問題 - 設置默認控制值

txtName.Text = "N/A"; 
dpStartDate.Value = DateTime.Now(5); //set 5 days from now 
dpEndDate.Value = DateTime.Now(10); //set 10 days from now 

如何做到這一點的WPF的形​​式,在哪裏?這是一個非常初學者的問題,在哪裏做的權利WPF方式

UPDATE: 到目前爲止,我發現我可以在Window_Loaded事件像這樣做:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    // Initialize Employee Data 
    txtName.Text = "N/A"; 
    dpEmplDate.Text = DateTime.Now.AddDays(-100).Date.ToString(); 
    dpTermDate.Text = DateTime.Now.AddDays(1).Date.ToString(); 
    txtAddress.Text = "N/A"; 
    dpDateOfBirth.Text = ""; 
    txtDepartment.Text="N/A"; 
    ... 
    ... 
} 

所以,我設置的默認值的員工這樣。 我的問題是,這是適當的WPF方式來初始化數據? 謝謝,

+1

這個問題的答案是學習WPF提及[some tutorials](http://wpftutorial.net/LearnWPFin14Days.html)。你的問題有很多可能的答案。您可以在[代碼隱藏或xaml](https://msdn.microsoft.com/library/aa970568%28v=vs.100%29.aspx)中執行此操作。 – Marshal

+0

@NirayDroshi是的,我更新了我的問題。但我想知道這是否是正確的WPF方式。應該在Window_Loaded事件中完成嗎?我應該按照更新的方式設置默認值,還是有適當的WPF方式?謝謝 – pixel

+2

我會高度推薦使用MVVM模式學習WPF。這與WinFroms是一個非常嚴重的背離,並且需要你對許多事情進行不同的思考,但這正是WPF設計工作的方式。你稍後會感謝你。 –

回答

1

沒有喜好來設置值Controls,直到你不使用MVVM pattern.

您可以在XAML做到這一點:

<TextBox Name=txtName Text="N/A"/> 

或代碼隱藏:

txtName.Text = "N/A"; 

但是WPF是非常酷的技術,因爲它可以在數據和視圖之間提供清晰的關注點。它可以使用MVVM模式來實現。 有可能使用Binding在數據和視圖之間以及從視圖到數據之間發送數據。所以在MVVM模式中,數據從view model開始設置。語法的例子:

查看:

<TextBox Text="{Binding FooProperty}"/>> 

視圖模型:

public class FooViewModel 
{ 
    private string fooProperty="Hello World";   
    public string FooProperty 
    { 
     get { return fooProperty; } 
     set { fooProperty = value; } 
    } 
} 

DataContext財產用於連接ViewViewModelViewModel的數據將不會顯示沒有設置DataContext屬性。

+0

好的,這似乎正在接近我想去的地方。所以在上面我更新的問題中,我將不得不有一個名爲Employee的類,它的屬性設置爲默認值,然後我將使用XAML中的Binding,如?是不是要求班級員工是靜態的?在您的示例中,如果另一個類具有名爲FooProperty的屬性,那麼{Binding FooProperty}將如何知道哪個FooProperty?非常感謝 – pixel

+2

正是!儘管如此,該類並不需要是靜態的。您可以使用幾種不同的方法來實例化ViewModel類。你只需要以某種方式將它放入表單的DataContext中。一個簡單的(但稍微皺眉)是將其設置在窗體的構造函數中。 'this.DataContext =新員工()'。另一個選擇是直接在XAML中定義它,例如這個''。更好的方法是使用MVVMLight之類的東西或不同的框架將ViewModels與視圖關聯起來,並讓它處理管道。 –

+1

@ dbnex14每個'Control'都有'DataContext'屬性。因此可以設置具有相同屬性名稱的各種'DataContext'。但它會是不同的觀點模型。閱讀本文http://www.wpf-tutorial.com/data-binding/using-the-datacontext/ – StepUp