मेरे पास MyTabItem, MyTabControl, MyGrid कक्षाओं के साथ कस्टम कक्षाओं की एक लाइब्रेरी है। जब आप MyTabItem (इसमें ViewModel का मान होता है) को MyGrid पर खींचते हैं, तो MyGrid_Drop ईवेंट ट्रिगर हो जाता है। इस बिंदु पर, MyTabControl बनाया गया है और मुझे एप्लिकेशन नेमस्पेस में एक संग्रह (ObservableCollection <ViewModelBase> Pages) बनाने और इसे MyTabControl.ItemsSource में निर्दिष्ट करने की आवश्यकता है। इस संग्रह में MyTabItem जोड़ने के बाद।

आवेदन में कोड:

public ObservableCollection<ViewModelBase> Pages { get; set; } = new ObservableCollection<ViewModelBase>();

पुस्तकालय में कोड:

private void MyGrid_Drop(object sender, DragEventArgs e)
        {
            if (e.Data.GetData(typeof(MyTabItem)) is MyTabItem tabItemSource)
            {
                if (InstanceTabControl.ItemsSource == null)
                {
                    // Here I need to create a collection of ViewModels with the type as the TabItemSource.Content.
                }

                if (InstanceTabControl.ItemsSource is IList list)
                {
                    var source = tabItemSource.Content;

                    list.Remove(source);
                    list.Add(source);

                    InstanceTabControl.SelectedIndex = list.Count - 1;
                }
                else
                {
                    InstanceTabControl.Items.Remove(tabItemSource);
                    InstanceTabControl.Items.Add(tabItemSource);

                    InstanceTabControl.SelectedIndex = InstanceTabControl.Items.Count - 1;
                }

            }
        }

संदर्भ नमूना प्रोजेक्ट PeopleDemo द्वारा।

  1. मैं एप्लिकेशन में संग्रह बनाने के लिए Func <T, TResult> प्रतिनिधि का उपयोग कर सकता हूं, लेकिन क्या मैं इसके बिना कर सकता हूं?
  2. अब Pages संग्रह ShellViewModel में है। ऐसा लगता है कि मुझे इस संग्रह को दृश्य मॉडलों के उप-संग्रहों के संग्रह में और फिर पुस्तकालय में बनाए गए प्रत्येक MyTabControl के लिए अपना स्वयं का उप-संग्रह बनाने की आवश्यकता होगी। लेकिन फिर इस तरह के उपसंग्रह को xaml (<adc:MyTabControl ItemsSource="{Binding Pages}">) में कैसे बांधें?

कृपया मुझे निर्देश दें कि इस समस्या को कैसे हल किया जाए?

0
Yury Yatskov 17 मई 2019, 23:37

1 उत्तर

सबसे बढ़िया उत्तर

मैंने इस समस्या को हल किया। पुस्तकालय के अंदर, मैं ObservableCollection<object> Pages संग्रह का उपयोग करता हूं। MyTabControl के प्रत्येक उदाहरण का अपना संग्रह होता है। मैं संग्रह के निर्माण को नियंत्रित करने वाले वर्ग के लिए जेनेरिक के माध्यम से एक प्रकार पास कर सकता हूं।

0
Yury Yatskov 26 सितंबर 2019, 19:06