如何在样式中设置绑定

本文关键字:设置 绑定 样式 | 更新日期: 2023-09-27 18:18:09

我对Xaml相当陌生。
我正在学习UWP(通用Windows平台),我有更多的按钮,我想把他们的背景属性绑定到一个ViewModel的属性,在一些事件中会发生变化。

我实现了INotifyPropertyChanged和一切工作正常(按钮的颜色改变),当我绑定背景属性在XAML中的按钮的声明:

<Button Content="0" Grid.Column="0" Grid.Row="5"
                Background="{Binding ButtonColor, Source={StaticResource AppViewModel}}" Style="{StaticResource BasicButton}"/>

StaticResource AppViewModel是App.xaml中的资源:

<Application.Resources>
    <viewModel:AppViewModel x:Key="AppViewModel" />
</Application.Resources>

我不知道如何确定是为App.xaml声明一个ViewModel,但这是一个解决方案,我发现有全局变量(变量在ViewModel内举行)。

现在回到我的问题:因为我不想在每个按钮上都绑定背景,我试着把它添加到这样的样式上:
<Style x:Key="BasicButton" TargetType="Button">
            <Setter Property="Background" Value="{Binding ButtonColor, Source={StaticResource AppViewModel}}" />
</Style>

但是现在,当color变量在运行应用程序时发生变化时,UI不再更新。样式中绑定的属性似乎不响应变量的变化。

我做错了什么?谢谢你的回答。

如何在样式中设置绑定

经过更多的搜索,我找到了一段来自Jerry Nixon的视频:http://blog.jerrynixon.com/2013/01/walkthrough-dynamically-skinning-your.html

似乎因为我们在uwp/winrt中没有DynamicResource,我们必须做一个技巧:我们重新导航到同一帧。所以在我们改变属性之后,我们需要这样做:

var frame = Window.Current.Content as Frame;
frame.Navigate(frame.Content.GetType());
frame.GoBack();

这就像使Windows窗体中的控件失效一样。它让UI重绘自己。我不确定这是否有副作用,我得再挖一些。如果我找到了我会回来的