2010-12-08 13 views
5

मेरे पास ऑब्जेक्ट का संग्रह है और मेरे व्यूमोडेल में एक कमांड है।आइटम कंट्रोल के अंदर से मॉडल प्रॉपर्टी देखने के लिए बाध्यकारी। इटैम टेम्पलेट

मैं संग्रह में प्रत्येक ऑब्जेक्ट के लिए एक हाइपरलिंक प्रदर्शित करना चाहता हूं, और ऑब्जेक्ट आईडी में कमांडपेयरमीटर के रूप में गुजरने के लिए प्रत्येक हाइपरलिंक के कमांड को एक ही कमांड पर सेट करना चाहता हूं। जैसे

// View Model 
public class MyViewModel : ViewModelBase 
{ 
    // Raises PropertyChanged event, ommited here 
    public List<MyClass> MyList {....} 

    public RelayCommand<int> MyCommand {....} 
} 

मैंने उपरोक्त ViewModel क्लास में अपने UserControl का DataContext सेट किया है। इस UserControl के लिए XAML इस प्रकार है:

<UserControl> 
    <ItemsControl ItemsSource="{Binding Path=MyList}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <HyperlinkButton Content="{Binding Path=Description}" Command="{Binding Path=MyCommand}" CommandParameter="{Binding Path=MyClassID}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</UserControl> 

हाइपरलिंक सामग्री के लिए विवरण सही ढंग से दिखाया गया है, लेकिन आदेश कभी नहीं आग, मैं इस लगता है, क्योंकि यह MyClass वस्तु के भीतर एक आदेश के लिए देख रहा है?

मैं MyClass.MyCommand की बजाय UserControls DataContext.MyCommand से कैसे जुड़ सकता हूं?

उत्तर

6

दुर्भाग्य से, हमारे पास WPF के सापेक्ष स्रोत मार्केट एक्सटेंशन पर FindAncestor मोड नहीं है, इसलिए आप इसका उपयोग नहीं कर सकते (यह सिल्वरलाइट 5 में जोड़ा जाएगा)। यह बुरा है, लेकिन आप अपने UserControl तत्व को एक नाम दे सकते हैं, और एलिमेंटनाम बाइंडिंग का उपयोग अपने डेटाकॉन्टेक्स्ट को दिए गए ऑब्जेक्ट पर कमांड से बांधने के लिए कर सकते हैं।

उदाहरण के लिए:

Command="{Binding Path=DataContext.MyCommand, ElementName=root}" 

दें कि एक कोशिश:

<UserControl Name="root"> 

फिर कमान (UserControl के DataContext से डॉट नोटेशन का उपयोग करके) के लिए बाध्य।

+0

क्रिस मुझे फर्मिन जैसी ही समस्या है। मैं एसएल 5 का उपयोग कर रहा हूं, सापेक्ष स्रोत बाध्यकारी काम नहीं करता है, न ही आपका जवाब करता है। बीटीडब्लू मैं नहीं देखता कि आपका उत्तर कैसे काम कर सकता है क्योंकि डेटाकॉन्टेक्स्ट में माइक्रॉमैंड नामक संपत्ति नहीं है। मेरे व्यू i.e. रूट में मेरे पास गेटटर में व्यूमोडेल नामक एक संपत्ति है जो मैं करता हूं: वापसी (MyViewModel) DataContext। यह अब भी काम नहीं करता है। – Sam

+0

हाय सैम, माईकॉमैंड उदाहरण से संबंधित है कि फर्मिन ने प्रदान किया - उनके दृश्य मॉडल पर एक आदेश। दुर्भाग्यवश मेरे पास आपकी मदद करने के लिए आपकी समस्या का पर्याप्त विवरण नहीं है। आप एक नया प्रश्न शुरू करने से बेहतर होंगे, ठीक उसी विवरण के विवरण के साथ जो आप करने की कोशिश कर रहे हैं और आप इसे कैसे करने की कोशिश कर रहे हैं। –

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