यहां मेरी समस्या है।क्या WPF डेटा बाइंडिंग (प्रतिपादन में सुधार) में देरी करने का कोई तरीका है?
ListBox एक अवलोकन संग्रह में सभी आइटम दिखाएं।
ListBox बी केवल उन ListBox ए
<ListBox ItemsSource="{Binding MyView}" Name="ListBoxA">
<ListBox ItemsSource="{Binding Path=SelectedItems,
ElementName=ListBoxA}" Name="ListBoxB">
जब चयन ListBox ए में परिवर्तित हो जाता है में चुने गए आइटम पता चलता है, एक स्टोरीबोर्ड चलाता है। परिणामी यूआई उपयोगकर्ता के चयन के आधार पर ListBox B में और बाहर एक शांत और चिकनी स्लाइड है।
समस्या यह है कि, जहां मेरी लिस्टबॉक्स एक डाटाबेस केवल नाम संपत्ति है, लिस्टबॉक्स बी डेटाबेस दर्जनों और कुछ मामलों में भी सैकड़ों गुण हैं।
समस्या तब भी जारी है जब डब्ल्यूपीएफ में डाटाबेसिंग एक छोटी, 50-500 मिलीसेकंद यूआई देरी बनाता है जब यह प्रतिपादन होता है (विशेष रूप से जब यह गतिशील होता है)। यूआई फ्रीज।
यह टिकाऊ है। लेकिन मेरी स्टोरीबोर्ड को इस डेटा बाइंडिंग विलंब से अवरुद्ध लगता है। नतीजतन यूआई प्रकार "स्नैप्स" जगह में और मेरी चिकनी स्टोरीबार्ड नहीं देखी गई है।
मैंने स्टोरीबोर्ड को संलग्न करके इसे हल किया है। पूर्ण घटना। एक बार स्टोरीबार्ड पूरा होने के बाद, मैंने सूची बॉक्स बी
के लिए आइटमसोर्स सेट किया है, हालांकि, यह केवल 50% अच्छा है। उपयोगकर्ता स्टोरीबोर्ड निष्पादित करता है, हां। लेकिन एनीमेशन के बाद सूचीबॉक्स बी के परिणामी यूआई अभी भी "स्नैप" देखे गए हैं।
ऐसा लगता है कि सही समाधान किसी भी तरह से सूची बॉक्स बी के अंदर दिए गए नियंत्रणों को इंगित करने या वास्तविक डेटाबेस में देरी करने का संकेत देता है। यह यूआई को स्टोरीबोर्ड में प्रस्तुत करने और भाग लेने की अनुमति देगा - लेकिन बाद में "भरने" के लिए डेटा (उम्मीद है कि डेटा बाइंडिंग के कारण देरी में भी देरी हो रही है)।
क्या किसी को भी ऐसी ही समस्या है?
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<x:Array Type="{x:Type sys:String}" x:Key="MyData">
<sys:String>One</sys:String>
<sys:String>Two</sys:String>
<sys:String>Three</sys:String>
<sys:String>Four</sys:String>
<sys:String>Five</sys:String>
<sys:String>Six</sys:String>
</x:Array>
<Storyboard x:Key="MyGrowStoryboard">
<ParallelTimeline>
<DoubleAnimation To="1" DecelerationRatio="0.5"
Duration="00:00:00.500"
Storyboard.TargetName="MyTransform"
Storyboard.TargetProperty="ScaleX" />
<DoubleAnimation To="1" DecelerationRatio="0.5"
Duration="00:00:00.500"
Storyboard.TargetName="MyTransform"
Storyboard.TargetProperty="ScaleY" />
</ParallelTimeline>
</Storyboard>
<Storyboard x:Key="MyShrinkStoryboard">
<ParallelTimeline>
<DoubleAnimation To=".1" DecelerationRatio="0.5"
Duration="00:00:00.500"
Storyboard.TargetName="MyTransform"
Storyboard.TargetProperty="ScaleX" />
<DoubleAnimation To=".1" DecelerationRatio="0.5"
Duration="00:00:00.500"
Storyboard.TargetName="MyTransform"
Storyboard.TargetProperty="ScaleY" />
</ParallelTimeline>
</Storyboard>
</Page.Resources>
<StackPanel>
<ListBox ItemsSource="{Binding Source={StaticResource MyData}}"
Name="ListBoxA">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<DataTemplate.Triggers>
<!-- grow -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="True"
Binding="{Binding Path=IsSelected,
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}}}" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard
Storyboard="{StaticResource MyGrowStoryboard}" />
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<BeginStoryboard
Storyboard="{StaticResource MyShrinkStoryboard}" />
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
<!-- shrink -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="False"
Binding="{Binding Path=IsSelected,
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}}}" />
<Condition Value="1"
Binding="{Binding Path=SelectedItems.Count,
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBox}}}" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard
Storyboard="{StaticResource MyShrinkStoryboard}" />
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<BeginStoryboard
Storyboard="{StaticResource MyGrowStoryboard}" />
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
</DataTemplate.Triggers>
<TextBlock Text="{Binding .}">
<TextBlock.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="1"
x:Name="MyTransform"/>
</TextBlock.LayoutTransform>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox ItemsSource="{Binding Path=SelectedItems,
ElementName=ListBoxA}" Name="ListBoxB">
<ListBox.ItemTemplate>
<DataTemplate>
<UniformGrid Columns="10">
<!-- repeat this part MANY times (like 3000) ! -->
<TextBox Text="{Binding .}" />
<TextBox Text="{Binding .}" />
<TextBox Text="{Binding .}" />
<TextBox Text="{Binding .}" />
<TextBox Text="{Binding .}" />
</UniformGrid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Page>
इस तरह लग रहा है:
यहाँ XAML कि वास्तव में समस्या को दर्शाता है (क्योंकि StackOverflow एक सवाल के आकार को सीमित, आप अतिरिक्त बक्सें जोड़ने के लिए वास्तव में देरी काफी देखने के लिए की आवश्यकता होगी) है
धन्यवाद!