2010-09-06 5 views
11

के साथ एक ListView के अंदर एक से आबद्ध करें बटन।एक कमान मैं तो मैं बाईं ओर एक नेविगेशन फलक (एक लिस्टबॉक्स), और सही पर एक ContentPresenter है कुछ बनाने के लिए की तरह एक एमडीआई इंटरफ़ेस टैब किए कोशिश कर रहा हूँ Caliburn.Micro

<ListView x:Name="AvailableScreens"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <WrapPanel> 
       <BulletDecorator /> 
       <Button x:Name="DisplayView"> 
        <TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" /> 
       </Button> 
      </WrapPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 

समस्या अब है कि हालांकि बटन का नाम सेट है:

मैं एक ShellViewModel पर यह AvailAbleScreens कहा जाता है और मैं सफलतापूर्वक में कामयाब रहे एक listviews DataTemplate के साथ उस सूची के लिए बाध्य करने के लिए एक BindableCollection है कि है ठीक है, मैं अपने लिए कमांड आग नहीं बना सकता। MdiViewModel वर्ग मुझे लगता है कि बटन के लिए निम्न कोड है पर:

public bool CanDisplayView() 
{ 
    return true; 
} 

public void DisplayView() 
{ 
    MessageBox.Show("Hello"); 
} 

सभी Caliburn.Micro नमूने एक्स के लिए सम्मेलनों के माध्यम से बाध्यकारी के साथ काम: नाम संपत्ति, लेकिन अगर मैं पाठ को दूर = "{} बाइंडिंग "यह काम करना बंद कर देता है इसलिए मुझे संदेह है कि डाटाबेसिंग का यह तरीका उप-मॉडल के लिए काम नहीं करता है?

वैसे भी, शैल के ViewModel पल में काफी सरल है:

ShellViewModel 
* AvailableScreens 
    -MdiViewModel1 
    -MdiViewModel2 
* CurrentActiveScreen 

कोई आइडिया कैसे मैं Caliburn.Micro के साथ ऐसा होगा? रॉब ईसेनबर्ग ने मुझे ट्विटर पर सुझाव दिया कि मैं कैलिबर्न के साथ शुरू करना चाहूंगा। पूर्ण कैलिबर्न ढांचे में जाने से पहले माइक्रोक्रो।

उत्तर

19

दुर्भाग्य से, हम स्वचालित रूप से DataTemplates की सामग्री के सम्मेलनों लागू नहीं कर सकते। इसका कारण यह है कि हमारे पास WPF/Silverlight के टेम्पलेट निर्माण तंत्र को अवरुद्ध करने का कोई तरीका नहीं है। इस के आसपास पाने के लिए आप विकल्पों में से एक जोड़ी है:

  1. DataTemplates के अंदर सम्मेलनों उपयोग न करें; स्पष्ट बाइंडिंग और संदेश का उपयोग करें। इसके बजाय

  2. उपयोगकर्ता नियंत्रणों में सभी डेटा टेम्पलेट निकालें जो उपयोगकर्ता नियंत्रण में सम्मेलनों को फिर से लागू करेगा। यह छोटा सा लोगों

  3. इस Bind.Model="{Binding}" तरह DataTemplate की जड़ UIElement पर Bind.Model संलग्न गुण का उपयोग के लिए बड़े टेम्पलेट्स के लिए एक अच्छा विचार है, लेकिन कठिन है। ऐसा करने से डेटा टेम्पलेट के खिलाफ सम्मेलनों को बाध्य किया जाएगा। दुर्भाग्यवश, कैलिबर में कुछ कीड़े के कारण यह सही काम नहीं कर सकता है। यह कैलिबर्न में काम करता है। हालांकि माइक्रो। मैं जल्द ही उस बग को काम करने की उम्मीद कर रहा हूं।

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

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