2015年5月17日 星期日

WPF學習筆記 - 12 Data binding part 1

<StackPanel Margin="10">

                <TextBox Name="txtValue" />

                <WrapPanel Margin="0,10">

                        <TextBlock Text="Value: " FontWeight="Bold" />

                        <TextBlock Text="{Binding Path=Text, ElementName=txtValue}" />

                </WrapPanel>

</StackPanel>

透過{Binding Path=Text, ElementName=txtValue},自動把txtValue的值bind到textbox裡

{Binding Path=Text, ElementName=txtValue}也可以寫成{Binding Text, ElementName=txtValue},

因為Path是預設值,後面的Text代表你bind的來源是什麼。

DataContext

<StackPanel Margin="15">

                <WrapPanel>

                        <TextBlock Text="Window title:  " />

                        <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" />

                </WrapPanel>

                <WrapPanel Margin="0,10,0,0">

                        <TextBlock Text="Window dimensions: " />

                        <TextBox Text="{Binding Width}" Width="50" />

                        <TextBlock Text=" x " />

                        <TextBox Text="{Binding Height}" Width="50" />

                </WrapPanel>

</StackPanel>

這裡用了三個bind,第一個textbox bind app的title,

第二、三個textbox分別bind window的寬和高,當window被拖曳,寬高改變時,也會直接顯示到

這兩個textbox裡。

不過這時候還沒有完成bind,你必需在backend加上,

public MainWindow()

{

            InitializeComponent();

            this.DataContext = this;

}

將DataContext設定好,才會生效。

上個例子我們看到了,UpdateSourceTrigger=PropertyChanged這個屬性,

代表當textbox的值被更動時,也會即時更新title,

如果將PropertyChanged改為LostFocus,則會當Focus移走時才反應,這是預設的行為,

如果使用Explicit,則需要明確表明需要更新,才會去更新title。

<WrapPanel>

                        <TextBlock Text="Window title:  " />

                        <TextBox Name="txtWindowTitle" Text="{Binding Title, UpdateSourceTrigger=Explicit}"

Width="150" />

                        <Button Name="btnUpdateSource" Click="btnUpdateSource_Click" Margin="5,0"

Padding="5,0">更新</Button>

</WrapPanel>

backcode

private void btnUpdateSource_Click(object sender, RoutedEventArgs e)

{

                        BindingExpression binding = txtWindowTitle.GetBindingExpression(TextBox.TextProperty);

                        binding.UpdateSource();

}

當點下"更新"Button時,才會更新title。

沒有留言:

張貼留言

[泰國] 芭達雅大城八日遊 Day7、8 - 瑪哈泰寺、Wat Ratchaburana、帕蒙空博碧寺、帕席桑碧寺、Hua Ro market、Chantharakasem National Museum、Amporn Department Store

第七天行程,早上吃飯店早餐,算不錯吃,只是有螞蟻,但吃完沒拉,所以應該還好 吃飽後飽嘟嘟車,一小時 200 泰銖,比自己叫還便宜,終於要來世界遺產之旅了 第一站:瑪哈泰寺,應該是大城最有名的景點了,入門票大人 120 ,小孩免費,其實不便宜 大城指標性景點...