wpf - डीबग और तैनात संस्करण के बीच UI टैब नियंत्रण दृश्यता परिवर्तन



vb.net mvvm (1)

यह काफी हैकी है लेकिन आप ऐसा कुछ करने की कोशिश कर सकते हैं:

Public Sub YourFormName.OnLoad ()
    Dim CorrectFormSize As Intager = YourFormName.Size
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.Size = New Size(CorrectFormSize)
End Sub

ध्यान रखें कि यह केवल आपके द्वारा वर्णन किए गए आकार परिवर्तन प्रक्रिया को स्वचालित करेगा।

यदि आप कुछ पंक्तियों को सहेजना चाहते हैं, क्योंकि आप एक बार लोड होने पर एप्लिकेशन पूर्ण स्क्रीन होने जा रहे हैं, तो आप कुछ पंक्तियां छोड़ सकते हैं और इसके बजाय इसे कर सकते हैं:

Public Sub YourFormName.OnLoad()
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.WindowState = System.Windows.Forms.FormWindowState.Maximized
End Sub

मेरे पास WPF Mvvm-Light अनुप्रयोग है जो उपयोगकर्ता को अलग-अलग दृश्य प्रदर्शित करने के लिए टैब नियंत्रण का उपयोग करता है।

मुसीबत:

मेरे पास यह समस्या यह है कि जब कार्यक्रम पहले टैब नियंत्रण को लोड करता है तो खाली दिखाई देता है। लेकिन स्थानीय रूप से डीबगिंग करते समय यह समस्या कभी नहीं होती है इस आवेदन को इस मुद्दे के बिना एक वर्ष से अधिक समय तक विकास में किया गया है और अचानक यह हो रहा है। छवि नीचे देखें

हैक फिक्स:

अगर उपयोगकर्ता अपनी विंडो का आकार बदलता है, टैब नियंत्रण में सामग्री रिफ्रेश करती है और प्रकट होती है और इस समस्या को कभी भी नहीं पुन: लेकिन यह समस्या पहले प्रोग्राम लोड और पहले टैब लोड पर 100% समय होती है (जो एक ही समय में होती है)

विवरण:

यहां मैं कैसे अपने विचारों को परिभाषित करता हूं जो टैब नियंत्रण में डाले जाते हैं

 <DataTemplate DataType="{x:Type FtcViewModel:DashboardNavViewModel}">
   <FtcView:DashboardNav  />
 </DataTemplate>

और यहां मेरा टैब नियंत्रण है:

<TabControl  Grid.Column="1" Grid.Row="3" 
                     SelectedItem="{Binding CurrentViewModel}" 
                     ItemsSource="{Binding OpenViewModelCollection}" 
                     Style="{StaticResource TabControlStyle}" 
                     ItemContainerStyle="{StaticResource TabItemStyle}" >
        </TabControl>

तो मुख्य विंडो के लिए मेरे दृश्य मॉडल में मैं टैब नियंत्रण में एक संग्रह आवंटित करता हूं और डिफ़ॉल्ट रूप से डैशबोर्ड को इस तरह खोलने के लिए पहली टैब के रूप में सेट करता है (केवल प्रासंगिक कोड को शामिल करने की कोशिश की जाती है, वैसे भी देखेंमॉडेल फ़ाइल में अधिक है):

Public Property OpenViewModelCollection As ObservableCollection(Of ViewModelHelper)
    Get
        Return Me._OpenViewModelCollection
    End Get
    Set(value As ObservableCollection(Of ViewModelHelper))
        If _OpenViewModelCollection Is value Then
            Return
        End If
        _OpenViewModelCollection = value
        RaisePropertyChanged(OpenViewModelCollectionPropertyName)
    End Set
End Property

Public Property CurrentViewModel As ViewModelHelper
            Get
                Return Me._CurrentViewModel
            End Get
            Set(value As ViewModelHelper)
                If _CurrentViewModel Is value Then
                    Return
                End If
                ''if change of viewmodel is not from OpenTabViewModelCommandExecute method
                If FlagOpening = False AndAlso value IsNot Nothing Then

                    If _CurrentViewModel IsNot Nothing Then
                        _CurrentViewModel.HandleNavigation(True)
                    End If

                    ''Mark NavService target VM
                    _NavService.TargetViewModelKey = value.vmKey

                    ''evaluate if naviagtion has been canceled
                    If _NavService.bCanNavigate = False Then
                        _NavService.bCanNavigate = True
                        Exit Property
                    End If
                End If
                ''if navigation not canceled, finish assigning new view model
                _CurrentViewModel = value
                RaisePropertyChanged(CurrentViewModelPropertyName)
                If _CurrentViewModel IsNot Nothing Then
                    _CurrentViewModel.RefreshModel()
                End If
            End Set
        End Property
...

'' THIS CODE IS FROM THE CONSTRUCTOR OF THE VIEW MODEL CLASS
OpenViewModelCollection.Add(_Locator.DashboardHome_VM)
CurrentViewModel = OpenViewModelCollection(0)

सवाल

कोई मुझे यह समझने में सहायता कैसे कर सकता है कि ऐसा क्यों हो रहा है या पहले एप्लिकेशन लोड के बाद UI को रीफ़्रेश करने का एक तरीका सुझाता है।

अग्रिम में धन्यवाद

अपडेट 1 - 4 अक्टूबर, 2017

मैं अपने विकास मशीन पर इस समस्या को पुन: उत्पन्न करने में सक्षम हूं। जब UI रिक्त होता है तो आप देख सकते हैं कि XAML डायग्नोस्टिक्स उपकरण दिखाई नहीं देते हैं। नीचे दी गई छवि को एक ही ऐप को डीबग किया गया है, लेकिन एक्सएएमएल टूल बॉक्स के बिना एक यह है कि लापता यूआई तत्वों में से एक है।

मेरी कस्टम टैब नियंत्रण शैली के अंदर निम्न सामग्री प्रदान नहीं की जा रही है:

<ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" >
    <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>

2 अक्टूबर 11 2017 को संपादित करें

मैंने व्यू मॉोडल में एक्सएमएल और कोड दोनों में ब्रेकपॉइंट सेट किए हैं I मैं पुष्टि कर सकता हूं कि ViewModel डेटा को सही ढंग से प्रारंभ किया जा रहा है और उसे ऑब्जेक्टिव ऑब्जेक्ट्स को सौंपा गया है। मैंने यह भी पुष्टि करने के लिए कि किस भाग को प्रदर्शित नहीं किया जा रहा है, मेरे टैब आईटम टेम्पलेट में "टेस्ट" टेक्स्टब्लॉन्स भी डाला। फिलहाल मुझे विंडो स्टार्टअप पर कोड से रीसाइज़ करने का एक भयानक हैक है, जबकि यह काम करता है, मैं अभी भी यह जानना चाहूंगा कि क्या हो रहा है।