2012-03-06 13 views
17

मैं एक नौसिखिया WPF प्रोग्रामर हूं। मैं अपने कोड में कुछ संरचना जोड़ने की कोशिश कर रहा हूं: उपयोगकर्ता नियंत्रण और एमवीवीएम दोनों।Caliburn.Micro उपयोगकर्ता नियंत्रण के साथ अच्छी तरह से खेलते हैं?

यहां शोध करते हुए, मुझे पता चला है कि people recommend Caliburn.Micro। दूसरी तरफ, मुझे कुछ शिकायतें मिली हैं here और elsewhere कैलिबर्न के बारे में। माइक्रो उपयोगकर्ता नियंत्रण के साथ अच्छी तरह से खेल नहीं रहा है।

तो मेरा सवाल है: कैलिबर्न। माइक्रो उपयोगकर्ता नियंत्रण के साथ अच्छी तरह से खेलते हैं?

उत्तर

36

हां, Caliburn.Micro उपयोगकर्ता नियंत्रण के साथ अच्छी तरह से खेलता है। यह एक रायबद्ध ढांचा है, लेकिन एक विशेष विकास पथ को मजबूर करने के बिंदु पर नहीं। चूंकि लिंक किए गए प्रश्नों के उत्तर बताते हैं कि यदि आपके पास कोई विशेष समस्या है तो आप हमेशा सादे पुराने WPF बाध्यकारी का उपयोग कर सकते हैं।

असल में, मैं उन दो लिंक को आपको बिल्कुल रोक नहीं दूँगा, पहला एक उपयोगकर्ता नियंत्रण में अलग-अलग गुणों को बाध्य करने का एक तरीका बता रहा है, और समाधान मान्य है। एक बेहतर समाधान शायद ItemsControl का उपयोग कस्टम DataTemplate के साथ करना होगा, और फिर उसके दृश्य मॉडल पर डीटीओ का संग्रह बनाएं जिसमें संपत्ति के नाम और मूल्य हों।

दूसरा लिंक यह बता रहा है कि यदि आप एक दृश्य (UserControl) बनाते हैं और XAML में दृश्य का एक उदाहरण बनाते हैं, और आप इसे एक दृश्य मॉडल से बांधना चाहते हैं, तो इसे पहले दृश्य कहा जाता है, और आपको Caliburn.Micro बता जहां दृश्य मॉडल के लिए बाध्य करने के लिए है:

<UserControl ... 
    cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" /> 

तो, यह धारणात्मक एक viewmodel/दृश्य नहीं बल्कि निर्भरता गुण आदि

वास्तव में साथ एक UserControl से के बारे में सोचा जा सकता है, आप जब आप Caliburn.Micro का उपयोग करेंगे, तो आप पाएंगे, आप दृश्य संरचना को करने के लिए शायद कम और कम UserControl एस का उपयोग करेंगे। ऐसा इसलिए है क्योंकि दृश्य मॉडल, विचार, और दृश्य मॉडल का पहला दृष्टिकोण उपयोग करके यूआई के पुन: प्रयोज्य टुकड़े बनाना बहुत आसान है।

जब आप अपने माता-पिता को देखने के मॉडल पर एक दृश्य मॉडल संपत्ति के रूप में एक ही नाम के साथ एक दृश्य में एक ContentControl है, तो Caliburn.Micro, इसी दृश्य मॉडल का दृश्य का पता लगाने ContentControl को इसकी सुई, और ऊपर से आबद्ध करेगा दृश्य/दृश्य मॉडल।

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

public class MyParentViewModel : Screen 
{ 
    public MenuViewModel MenuViewModel { get; set; } 

    public DetailsViewModel DetailsViewModel { get; set; } 

    public MyParentViewModel() 
    { 
    this.MenuViewModel = new MenuViewModel(); 
    this.DetailsViewModel = new DetailsViewModel(); 
    } 
} 

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width=".2*" /> 
    <ColumnDefinition Width=".8*" /> 
    </Grid.ColumnDefinitions> 

    <ContentControl Grid.Column="0" x:Name="MenuViewModel" /> 
    <ContentControl Grid.Column="1" x:Name="DetailsViewModel" /> 

</Grid> 
+0

Caliburn के साथ बाहर शुरू करने और सिर्फ अपने बहुत उपयोगी पोस्ट में आए - ... अब के रूप में ज्यादा usercontrols का उपयोग कर ... एक दृश्य afaics पर थोड़ा विस्तार कर सकता है एक होने जा रहा है उपयोगकर्ता नियंत्रण नहीं है? thxvm –

+2

हां, कैलिबर्न के साथ। मिक्रो आप निर्भरता गुणों के साथ उपयोगकर्ता नियंत्रण की भावना में उपयोगकर्ता नियंत्रणों का उपयोग नहीं करेंगे, सीधे किसी अन्य उपयोगकर्ता नियंत्रण/विंडो इत्यादि से नियंत्रण को तुरंत चालू करेंगे – devdigital

+0

ठीक है ... लेकिन आप अभी भी घर पर रहेंगे , उपयोगकर्ता नियंत्रण में एक ग्रिड (व्यूमोडेल/xaml में सभी कस्टम व्यवहार के साथ) और कैलिबर्न के माध्यम से उस सामग्री नियंत्रण में गतिशील रूप से लोड हो जाता है। माइक्रो? (बस जांचना चाहता हूं कि मुझे कुछ याद नहीं है)। Thx बहुत बार फिर से। –

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