6

ViewModel にはIsNotSupported、センサーがサポートされていない場合に警告情報を表示するために使用されるという名前のブール型プロパティがあります。したがってBooleanToVisibilityConverter、リソースに追加されたを使用します。

<phone:PhoneApplicationPage.Resources>
    <local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</phone:PhoneApplicationPage.Resources>

警告を含むスタックパネルにバインドします。

<StackPanel x:Name="NotSupportedWarning" Visibility="{Binding IsNotSupported,
                    Converter={StaticResource BooleanToVisibilityConverter}}">

それはすべてうまく機能しますが、ページをロードし、センサーがサポートされている場合、警告はほんの一瞬表示され、その後消えます. このちらつきは、バインディングがまだ発生していないため、デフォルトで表示されていることが原因であることを知っています。

そのちらつきは地獄のように迷惑です...むしろ、デフォルトで折りたたまれ、警告が表示されるべきであることが明確になった後にのみ表示されるようにする必要があります。また、これによりバインディング後の 2 回目のレイアウト パスが回避されるため、パフォーマンスにプラスの影響が生じる可能性があります。


私はこの問題を何度も抱えていましたが、密接に関連しているこのSO の質問が見つかるまでインターネットで何も見つかりませんでしたが、Silverlight の代わりに Windows Phone を検索しても見つかりませんでした。問題と解決策はどちらも単純に見えるかもしれませんが、私はかなり長い間私を悩ませていたので、同じ問題に直面している他の人を助けるためにQ&A スタイルの質問を書くのは良い考えだと思いました.

4

2 に答える 2

8

あなたがそれを見た後、解決策は簡単です。バインディングのデフォルト値を制御できます (バインディングがまだ行われていない場合) FallbackValue。stackpanel XAML は次のようになります。

<StackPanel x:Name="NotSupportedWarning" Visibility="{Binding IsNotSupported,
                    FallbackValue=Collapsed, 
                    Converter={StaticResource BooleanToVisibilityConverter}}">

このようにしてちらつきを取り除き、警告が非表示のままである場合、バインディング後に再ルーティングする必要はありません。

于 2012-06-27T15:03:42.973 に答える
1

ブール値の代わりに可視性タイプのプロパティに直接バインドし、そのプロパティをデフォルトで折りたたんだままにしておくことができ、さらに INotifyPropertyChanged を実装できます

于 2012-07-04T09:33:42.403 に答える