2011-12-13 8 views
1

次のような方法がありますか?私は基本的に希望は何条件が満たされなくなったときに元に戻されないDataTrigger

<Style TargetType="{x:Type: TreeViewItem}"> 
    <Style.Triggers> 
     <DataTrigger Binding="~Complex Binding~" Value="True" DoNotUnset="True"> 
      <Setter Property="IsExpanded" Value="True"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

は、あなたがする場合は、これが「いいえ元に戻すDataTrigger」になることです。 Valueがもはや "True"でなくなったら、 "IsExpanded"を以前の値に戻すことは望ましくありません。

これは入力操作でこれを行う私の試みですが、これにも問題があります。

<Style TargetType="{x:Type: TreeViewItem}"> 
    <Style.Triggers> 
     <DataTrigger Binding="~Complex Binding~" Value="True"> 
      <DataTrigger.EnterActions> 
       <BeginStoryboard> 
        <BeginStoryboard.Storyboard> 
         <Storyboard> 
          <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(IsExpanded)" Duration="00:00:01" FillBehavior="Stop"> 
           <BooleanKeyFrameCollection> 
            <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True"/> 
           </BooleanKeyFrameCollection> 
          </BooleanAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard.Storyboard> 
       </BeginStoryboard> 
      </DataTrigger.EnterActions> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

まずこれがめちゃくちゃ冗長ですが、BooleanAnimationUsingKeyFramesの期間中、第二に、この唯一の作品。 FillBehaviorを「HoldEnd」に変更した場合は正しく表示されますが、ユーザーはクリックでツリービュー項目を展開することができなくなりました(キーボードを使用してもまだ奇妙なことですが)。

私は再帰的なItemsGenerator.GetItemContainerFromIndex(i)ループを構築したくないため、バインドによってすべてのアイテムをツリービューで展開しようとしています。私はまだ私のコードの他の領域で同様の "元に戻すデータなし"を使用したいと思います。

答えて

0

私は〜Complex Binding〜をViewModelのboolにバインドします。これは一度trueに設定すると常にtrueです。

private bool _onceTrueAlwaysTrue = false; 
public bool OnceTrueAlwaysTrue 
{ 
    get 
    { 
     return _onceTrueAlwaysTrue; 
    } 
    set 
    { 
     if(value) 
     { 
      _onceTrueAlwaysTrue = true; 
      OnPropertyChanged("OnceTrueAlwaysTrue"); 
     } 
    } 
} 

このプロパティをIsEnabledにバインドすると、正常に動作するはずです。リセットしたい場合は、単に_onceTrueAlwaysTrue = falseを設定するリセットメソッドを作成してください。

NoUndoデータトリガーについては、私が知る限り、そのようなことはありません。あなたは毎回何らかの仕事をしなければならないでしょう。

The properties changed by triggers are automatically reset to their previous value when the triggered condition is no longer satisfied. Triggers are optimized for transient states which are expected to change and return to original state, such as IsPressed on Button and IsSelected on ListBoxItem.

関連する問題