我遇到了一个我无法理解的问题,而且我没有在这里或谷歌找到解决方案。我需要一种方法来通知我的Viewmodel有关应用程序大小的更改,以更改Grid中列的可见性。我使用的解决方案并不是最漂亮的,所以如果你有任何其他的建议,我很开心。
问题是当自适应触发器触发时,它正在更新隐藏文本框中的双向绑定文本的值。然后将其推送到viewmodel并更新布局。但是由于某种原因,旧的值在之后再次被直接推送并且只是重置更改。因此,使用新的正确值将setter调用两次,然后再使用旧值调用。
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"/>
视图模型 绑定字符串:
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 :(得分:0)
感谢您的回复。我通过使用触发器更改包含网格的宽度来解决它。宽度也绑定到视图模型,这样我就可以相应地更新数据。