ठीक है, यह कुछ हद तक इस प्रश्न से संबंधित है: WPF Printing multiple pages from a single View ModelMVVM + UserControl + निर्भरता संपत्ति
मैं वहाँ दी सलाह का पालन करने की कोशिश की लेकिन अब मैं अटक कर रहा हूँ।
मेरा आवेदन एक MainView.xaml और उचित MainViewViewModel.cs, मैं पृष्ठभूमि में MVVM लाइट का उपयोग कर रहा उपयोग करता है।
अब - पोस्ट के अनुसार - ऐसा लगता है मुझे क्या करना निम्नलिखित है:
- एक उपयोगकर्ता नियंत्रण
- बनाएं उपयोगकर्ता नियंत्रण से कुछ गुण का पर्दाफाश गुण
विचार स्पष्ट है लेकिन मैं एक-दूसरे को सूचित करने की कोशिश करते समय अटक गया हूं।
मेरे उपयोगकर्ता नियंत्रण (UcTest.xaml) को उजागर करता एक निर्भरता संपत्ति:
public string SpecialText
{
get { return (string)GetValue(SpecialTextProperty); }
set
{
SetValue(SpecialTextProperty, value);
}
}
// Using a DependencyProperty as the backing store for SpecialText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SpecialTextProperty =
DependencyProperty.Register("SpecialText", typeof(string), typeof(UcTest), new PropertyMetadata(new PropertyChangedCallback(SpecialTextChangedPropertyCallback)));
private static void SpecialTextChangedPropertyCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
// Do something
Debug.WriteLine("Ffgdgf");
}
ठीक है, इसलिए मैं अब एक उपयोगकर्ता नियंत्रण जो कुछ निर्भरता गुण है की क्या ज़रूरत है। फिर भी, ये गुण पूरी तरह से मेरे व्यूमोडेल गुणों से अलग हैं (वे हैं जिन्हें प्रदर्शित किया जाएगा)।
तो बुनियादी तौर पर मैं दो संभावनाएं हैं:
- कैसे मैं अब UserControl के लिए मेरे ViewModel बता सकता है कि कुछ गुण बदल गया है?
- क्या निर्भरता गुणों को भूलने और सीधे दृश्य मॉडल तक पहुंचने की संभावना है?
अतिरिक्त जानकारी # 1: Example Project: मैं मैं क्या यहाँ करने के लिए कोशिश कर रहा हूँ की एक (सरल) उदाहरण अपलोड कर दिया है। मैं अपने MainViewViewModel से UserControl1 (UserControl1 के लिए ViewModel में बाइंडिंग प्रॉपर्टी के माध्यम से) में लेबल का मान बदलना चाहता हूं।
डेटा बाध्यकारी –
का उपयोग करें इसका मतलब यह होगा कि मेरे उपयोगकर्ता नियंत्रण को INOTifyPropertyChanged को लागू करने की आवश्यकता होगी जो मूल रूप से मेरा ViewModel करना चाहिए। –