2011-10-26 4 views
6

के बीच ईवेंट भेजना मेरे पास दो WPF विंडो हैं। एक मुख्य खिड़की है और दूसरा कुछ विन्यास खिड़की है। मैं कॉन्फ़िगरेशन विंडो को मुख्य विंडो में भेजने और ईवेंट भेजना चाहता हूं। कोई विचार है कि मैं इसे कैसे पूरा करता हूं?2 WPF विंडोज़

यह वह जगह है मैं कैसे बना सकते हैं और विन्यास विंडो खोलने:

private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     ConfigPage Confwin= new ConfigPage(); 
     Confwin.Owner = this; 
     Confwin.Show(); 
    } 
+0

जो कॉन्फ़िगरेशन विंडो बना रहा है? क्या आप एमवीवीएम का उपयोग कर रहे हैं? – sll

उत्तर

15

आप अपने बच्चे को खिड़की कक्षा में किसी भी घटना को परिभाषित करने और खिड़की दिखाने से पहले यह करने के लिए सदस्यता ले सकते हैं।

मुख्य विंडो

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
    } 

    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     Child childWindow = new Child(); 
     childWindow.MyEvent += new EventHandler(childWindow_MyEvent); 

     childWindow.ShowDialog(); 
    } 

    void childWindow_MyEvent(object sender, EventArgs e) 
    { 
     // handle event 
     MessageBox.Show("Handle"); 
    } 
} 

बाल खिड़की

public partial class Child : Window 
{ 
    // define event 
    public event EventHandler MyEvent; 

    protected void OnMyEvent() 
    { 
     if (this.MyEvent != null) 
      this.MyEvent(this, EventArgs.Empty); 
    } 

    public Child() 
    { 
     InitializeComponent(); 

     this.Loaded += new RoutedEventHandler(Child_Loaded); 
    } 

    void Child_Loaded(object sender, RoutedEventArgs e) 
    { 
     // call event 
     this.OnMyEvent(); 
    } 
} 
+2

बहुत अच्छा और साफ तरीका। इवेंट हैंडलिंग की मूल संरचना को समझने के लिए भी बहुत सरल कोड। मेरे द्वारा +1 ... – phil13131

+1

भी कुछ त्वरित धन्यवाद देना चाहता था, इससे मुझे अपने स्वयं के ईवेंट हैंडलर, एक और +1 सेट करने की मूल बातें समझने में मदद मिली। – unrealtrip

2

आप कमजोर घटना पैटर्न का उपयोग करना चाहिए। यदि आप Prism या MVVMLight का उपयोग करते हैं तो यह बनाया गया है।

अन्यथा, आप यह अपने आप को लागू करना होगा: msdn

इस का कारण यह है कि यह मुख्य विंडो से विन्यास खिड़की अलग करता है।
उन्हें एक-दूसरे के बारे में पता नहीं होना चाहिए ताकि कॉन्फ़िगरेशन विंडो पुन: प्रयोज्य हो (और आपके ऐप में जीवित कोई ऑब्जेक्ट भी ईवेंट को सुन सके)।

+0

+1 अच्छा बिंदु, प्रिज्म आशाजनक लग रहा है – walter