2009-03-26 11 views
12

क्या सिल्वरलाइट डेटा टेम्पलेट में कोई ईवेंट बाध्य करना संभव है? यदि हां, तो ऐसा करने का सबसे अच्छा तरीका क्या है?क्या सिल्वरलाइट डेटा टेम्पलेट में एक ईवेंट को बाध्य करना संभव है?

<UserControl.Resources> 
    <DataTemplate x:Key="MyDataTemplate" > 
    <Grid> 
     <Button Content="{Binding ButtonText}" Margin="4" /> 
    </Grid> 
    </DataTemplate> 
</UserControl.Resources> 

उसके बाद, आप, एक ListBox ItemTemplate में इसे लागू इस तरह::

उदाहरण के लिए, यदि आप एक DataTemplate उस में एक बटन है, इस तरह बना लिया है कहना

<Grid x:Name="LayoutRoot" Background="White"> 
    <ListBox x:Name="lbListBox" ItemTemplate="{StaticResource MyDataTemplate}" />  
</Grid> 

आप वर्ग की वस्तुओं की एक सूची के लिए ListBox के ItemSource सेट करते हैं:

public class MyDataClass 
{ 
    public string ButtonText{ get; set; } 
} 

आप वें कैसे तो पकड़ है ई बटन सूची में डेटा टेम्पलेट से प्रत्येक बटन से क्लिक करें? आप "MyButtonClass" में एक विधि के लिए घटना के लिए क्लिक करें बाध्य करने के लिए बाध्यकारी उपयोग कर सकते हैं, इस तरह:

<UserControl.Resources> 
    <DataTemplate x:Key="MyDataTemplate" > 
    <Grid> 
     <Button Click="{Binding OnItemButtonClick}" Content="{Binding ButtonText}" Margin="4" /> 
    </Grid> 
    </DataTemplate> 
</UserControl.Resources> 

चाहेंगे इस काम करता है? यदि हां, तो मुझे घटना को पकड़ने के लिए "MyDataClass" में क्या रखा जाना चाहिए?

धन्यवाद, जेफ

+0

यही कारण है कि कमांड बेहतर हैं। .NET 4 ढांचे में आप कमांड (घटनाओं के विपरीत) को बाध्य कर सकते हैं ताकि आप अभी भी एमवीवीएम का उपयोग बिना किसी कोड-बैक और बाध्य कार्यक्षमता के कर सकें। –

उत्तर

4

पास कुछ विकल्प होते हैं।

वन। एक कस्टम नियंत्रण करें जो उस पंक्ति के लिए डेटा ऑब्जेक्ट को बाध्य करता है। उस कस्टम नियंत्रण पर बाध्य वस्तु के लिए हैंडलर जोड़ें।

मुझे नहीं लगता कि क्लिक पर आपका बाध्यकारी काम करेगा। बाइंडिंग स्टेटमेंट को सांस करें और बस एक स्ट्रिंग पर अपना क्लिक घोषित करें।

उस पृष्ठ पर हैंडलर जोड़ें जहां नियंत्रण रखा गया है। ध्यान रखें कि यदि आप इस तरह से बाध्य करते हैं तो आप केवल उस आइटम (बटन) और उसके गुणों के प्रेषक के साथ काम करने में सक्षम होंगे। यदि आपको किसी ऑब्जेक्ट पर विशिष्ट विशेषताओं को प्राप्त करने की आवश्यकता है तो आप पहले विकल्प का पीछा करने से बेहतर हो सकते हैं।

छोटे उदाहरण क्लिक ईवेंट के साथ एक सूची बॉक्स में 10 बटन जोड़कर कार्यक्षमता का प्रदर्शन करते हैं। HTH

DataTemplate XAML

<UserControl.Resources> 
    <DataTemplate x:Name="MyDataTemplate"> 
     <Grid> 
      <Button Click="Button_Click" Content="{Binding ItemText}"/> 
     </Grid> 
    </DataTemplate> 
</UserControl.Resources> 

ListBox XAML

(मैं सिर्फ सभी page.xaml फाइल में इस खामियों को दूर
<ListBox x:Name="ListBoxThingee" ItemTemplate="{StaticResource MyDataTemplate}"/> 

कोड के पीछे

public class MyClass 
{ 
    public string ItemText { get; set; } 
} 


public partial class Page : UserControl 
{ 
    ObservableCollection<MyClass> _Items; 
    public Page() 
    { 
     InitializeComponent(); 

     _Items = new ObservableCollection<MyClass>(); 

     for (int i = 0; i < 10; i++) 
     { 
      _Items.Add(new MyClass() {ItemText= string.Format("Item - {0}", i)}); 
     } 

     this.ListBoxThingee.ItemsSource = _Items; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Button _b = sender as Button; 
     if (_b != null) 
     { 
      string _s = _b.Content as string; 
      MessageBox.Show(_s); 
     } 

    } 
} 
2

मैं क्या करना होगा क्या बनाने है एक बटन जो क्लिक हैंडलिंग के लिए कमांड पैटर्न का उपयोग करता है। .NET 4 ढांचे में आपबांध सकते हैं दृश्य मॉडल पर मौजूदपर।

संबंधित मुद्दे