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();
。最後の呼び出しをしなければ、すべての子ビューモデルが可視になります。
」:
は、ちらつきの根本的な原因によっては、SO上のいくつかの修正が既に存在していますこれの背後にある機能の中でオンとオフを切り替える:...しかし、レンダリングすることはできません。私はそれがビューを事前レンダリングするのに適していると思う。しかし、なぜそれは全く表示されませんか? – Tyress
IDK、私は質問自体に関数を追加しましたが。私が物事をデバッグモードで実行し、ブレークポイントを関数に張り付けると、実際に実行中に表示されるUI要素は表示されません。 – Glazius
ChangeChildModel()は何をしますか? :)あなたがそれを処分しているなら、それを実際にプレレンダリングしているわけではありませんよね? – Tyress