[Silverlight] 取得ChildWindows 的值 (2)

2010/10/26

延續上一篇 取得 ChildWindows 的值 (1)
現在這方式會比較立即改變MainPage的值…
這方法Code 比較簡單..
但是缺點是限定呼叫的物件…

一樣先介紹一下畫面配置..
sshot-63

btnGet1 點下之後會跳出ChildWindow 選取項目之後..
會即時的改變lblResult1 的內容..


ChildWindow 配置如下..
sshot-66

ChildWindow C# Code :

using System.Windows;
using System.Windows.Controls;

namespace GetChildWindowsValue
{
    public partial class ChildWindow1 : ChildWindow
    {
        
        private MainPage _Father; 

        //在 Ctor的時候 放信MainPage 物件
        public ChildWindow1(MainPage mainPage)
        {
            InitializeComponent();

            //用_Father抓住 傳入的MainPage 物件
            _Father = mainPage;
        }
  

        //加入三個測試項目
        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            this.lstMain.Items.Add("當麻許");
            this.lstMain.Items.Add("六月羊");
            this.lstMain.Items.Add("Dracula");
            
        }

   

        private void lstMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //在 lstMain 的項目選擇被改變時 直接去更改 MainPage 的lblResult1.Content
            //所以可以立即改變MainPage 的lblResult1的Content
            _Father.lblResult1.Content = this.lstMain.SelectedValue.ToString();
        }
    }
}


有沒有發現.. 在 ChildWindow1 的 constructor 中必須要傳入MainPage ..
這樣之後就可以直接改變父親(MainPage) 裡面的物件…

所以在 btnGet1 的Click事件為:

private void btnGet1_Click(object sender, RoutedEventArgs e)
{
    //將MinaPage 指標傳入
    ChildWindow1 childWindow1 = new ChildWindow1(this);
    childWindow1.Show();
}

這樣跟方法一的不同方法是..
可以直接控制呼叫視窗裡面的物件或是function..
但是這樣做..會有一些限制..
這樣就等於限定了呼叫ChildWindow 的資格…
所以有好有壞…
看需求搂..

讚一下:


下載:


範例:

可以看一下你在變換選取值的時候MainPage 的Label 就已經更改了


0 意見:

程式 . 生活 . D小調.@2010 | Binary Design: One Winged Angel.