2016-12-25 6 views
0

私は理解できない問題に遭遇しましたが、ここやGoogleで解決策が見つかりませんでした。 ViewModelに、グリッドの列の可視性を変更するためのアプリケーションサイズの変更について通知する方法が必要でした。私が使っている解決策は、あなたが他の提案があれば、とても魅力的です。セッターが2回呼び出されました

Adaptive Triggerがトリガーすると、非表示のテキストボックス内の双方向のテキストの値が更新されるという問題があります。これは次にビューモデルにプッシュされ、レイアウトが更新されます。しかし、何らかの理由で古い値が直後に再び押され、変更がリセットされます。したがって、セッターは新しい正しい値で2回呼び出され、もう一度古い値で直後に呼び出されます。

XAML:

 <VisualStateGroup x:Name="Base"> 
      <VisualState x:Name="Full"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="1024"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="NavigationRow.Height" Value="0"/> 
        <Setter Target="HelperBox.Text" Value="Full"/> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState x:Name="Medium1"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="600"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="HelperBox.Text" Value="Medium"/> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState x:Name="Small1"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="0"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="HelperBox.Text" Value="Small"/> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 

隠しテキストボックス:

<TextBox x:Name="HelperBox" Text="{Binding ApplicationSize, 
Mode=TwoWay, UpdateSourceTrigger=Default}" 
Visibility="Collapsed"/> 

ViewModelにバインドさ 文字列:

private string _applicationSize; 
    public string ApplicationSize 
    { 
     get { return _applicationSize; } 
     set 
     { 
      _applicationSize = value; 
      UpdateLayout(); 
     } 
    } 

UpdateLayout方法:

private void UpdateLayout() 
    { 
     switch (ApplicationSize) 
     { 
      case "Small": 
       FirstColumnVisibility = true; 
       SecondColumnVisibility = false; 
       ThirdColumnVisibility = false; 
       break; 
      case "Medium": 
       FirstColumnVisibility = true; 
       SecondColumnVisibility = true; 
       ThirdColumnVisibility = false; 
       break; 
      case "Full": 
       FirstColumnVisibility = true; 
       SecondColumnVisibility = true; 
       ThirdColumnVisibility = true; 
       break; 
     } 
    } 
+0

あなたの問題点がわかりません。[mcve]に従って完成したデモをアップロードできますか? –

+0

私はこの問題についてよく分かりません。ただし、グリッドの列を非表示にする代わりに、いつでも別のパネルを表示することができます。私はあなたが隠そうとしている別のパネルにレイアウトを置くことが可能でなければならないということです。 – saurabh

答えて

0

ご回答いただきありがとうございます。トリガーを含むグリッドの幅を変更して解決しました。幅もビューモデルにバインドされており、それに応じてデータを更新することができました。

関連する問題