現在、バッキング ビュー モデルのプロパティにIsOpen
a のプロパティをバインドしようとしています。ToolTip
さらに、バインディング モードは「OneWayToSource」に設定されます。
これは にStyle
適用され、次の定義TreeViewItem
を含むです。ToolTip
<Style TargetType="TreeViewItem">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip IsOpen="{Binding IsToolTipOpen, Mode=OneWayToSource}">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding CurrentValue, StringFormat={}Value: {0}}"/>
<TextBlock Text="{Binding UnitName, StringFormat={}Unit: {0}}"
Visibility="{Binding HasUnit, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</StackPanel>
</ToolTip>
</Setter.Value>
</Setter>
</Style>
バインド先のプロパティのコードは次のとおりです。
public bool IsToolTipOpen
{
get
{
return mIsToolTipOpen;
}
set
{
PegasusContext.Current.LogMessage( new PegasusMessage( string.Format( "IsTooltipOpen: {0}", value ), LogLevel.Debug ) );
if( mIsToolTipOpen == value ) return;
mIsToolTipOpen = value;
if( mIsToolTipOpen )
{
BackingIO.BeginWatching();
}
else
{
BackingIO.StopWatching();
}
}
}
ToolTip が初めてIsToolTipOpen
開かれると、その値を に設定するプロパティが呼び出されfalse
ます。さらに、ToolTip が閉じると、値が ... に再度設定されIsToolTipOpen
ますfalse
。それ以降は毎回、期待どおりに値が設定されます。最初の ToolTip を開いた後、ToolTip が添付された他の項目で奇妙な動作を実行します。たとえば、IsToolTipOpen
プロパティをに設定してから、すぐにtrue
元に戻します。false
繰り返しますが、その後開くたびに、ToolTip
正常に動作します。
これは、私のIsToolTipOpen
プロパティ set メソッドの最初の行にあるロギング コードからのレポートです (いくつかのコメントを手書きで追加しています)。
TreeViewItem A:
IsTooltipOpen: False <-- ToolTip Opened
IsTooltipOpen: False <-- ToolTip Closed
IsTooltipOpen: True <-- ToolTip Opened
IsTooltipOpen: False <-- ToolTip Closed
TreeViewItem B:
IsTooltipOpen: True <-- ToolTip Open
IsTooltipOpen: False <-- ToolTip Open, occured at the same time as the previous entry.
IsTooltipOpen: False <-- ToolTip Closed
IsTooltipOpen: True <-- ToolTip Opened
IsTooltipOpen: False <-- ToolTip Closed
それで、何が起こっているのか誰かが知っているかどうか興味がありましたか?そして可能な解決策は?