2015-12-15 22 views
14

2つのSimpleChildElementsと1つのComplexChildElementの3つの子要素の1つを持つことができるWPFでコード化されたコードがあります。モデルの背後にあるロジックに応じてそれらの表示を入れ替えますこれを行う。WPF MVVMを使用した負荷の事前レンダリング/非表示

<ItemsControl 
    ItemsSource="{Binding ChildPanels.Values}" 
    Name="ContentControl1" 
    > 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <ContentControl Content="{Binding}" 
      Visibility="{Binding Path=Active, Converter={StaticResource BooleanToVisibilityConverter}}"/> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

子要素は、独自のviewmodelsあり、私は上流の彼らのためにDataTemplatesがあるので、宣言したいくつかのリソースを持っています。

マスターコントロールとComplexChildElementの要素をスクロールして初めて表示されるときは、簡単ではっきりと見えますがそれが飾られるとちらつき - それはDevExpressで装飾されたコンボボックスの束です。この設定は、ComplexChildElementでレコードをスクロールしてから再びスクロールするときにちらつきが発生しないことを意味し、そこにComplexChildElementを含むマスターコントロールの表示を開始すると、再びポップアップするときにちらつきが発生しません。

しかし、マスターコントロールは別のデータソースにキーインされています。最初のレコードにComplexChildElementが存在することを保証することはできません。現時点で

したがって、フォームが読み込まれたときにComplexChildElementがレンダリングされ、直後に非表示になることをどうすれば保証できますか?私はすでに、この背後にある関数内のオンとオフを切り替えるChildPanels.Active試してみた:

<dxmvvm:Interaction.Triggers> 
    <dxmvvm:EventToCommand EventName="Loaded" Command="{Binding OnViewLoadedCommand}" /> 
</dxmvvm:Interaction.Triggers> 

が、それは彼らがレンダリングするために取得していません。道による

その関数、:最後の関数呼び出しが時にレコードの変更子モデルの可視性を変更するために呼び出さ一つであると

foreach (var childModel in ChildPanels.Values) 
    { 
    childModel.Active = true; 
    RaisePropertyChanged(() => childModel.Active); 
    } 
ChangeChildModel(); 

。最後の呼び出しをしなければ、すべての子ビューモデルが可視になります。

+0

」:

は、ちらつきの根本的な原因によっては、SO上のいくつかの修正が既に存在していますこれの背後にある機能の中でオンとオフを切り替える:...しかし、レンダリングすることはできません。私はそれがビューを事前レンダリングするのに適していると思う。しかし、なぜそれは全く表示されませんか? – Tyress

+0

IDK、私は質問自体に関数を追加しましたが。私が物事をデバッグモードで実行し、ブレークポイントを関数に張り付けると、実際に実行中に表示されるUI要素は表示されません。 – Glazius

+0

ChangeChildModel()は何をしますか? :)あなたがそれを処分しているなら、それを実際にプレレンダリングしているわけではありませんよね? – Tyress

答えて

2

可視性を最初から間違って設定してください。これにより、後でActiveでバインディングを使用することが妨げられることはありません。

バインディングは正常ですが、DataTemplateで親コントロールによって可視性およびを変更して子コントロールをレンダリングする必要があるかどうかを確認するために使用されます。そのため、サブスクリプションの注文に応じて、PropertyChangedイベントに応じて、親コントロールではコントロールが表示される場合と表示されない場合があります。いくつかのコントロール上表示/非表示を呼び出すときにところで

は、あなたの最初の目標は、その月のちらつきを防止しなかった場合、私は思ったんだけど起こります。私はプレレンダリングがそのための正しい解決策であるとは思わない。私はすでにChildPanels.Activeを切り替える試した

関連する問題