c# – 如何在样式中设置绑定?

我对Xaml很新.
我正在学习UWP(通用 Windows平台),我有更多按钮,我想将他们的Background属性绑定到viewmodel的属性,该属性将在某些事件期间发生变化.

当我在XAML中的Buttons声明中绑定Background属性时,我实现了INotifyPropertyChanged并且一切正常(按钮的颜色改变了):

<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中).

现在回到我的问题:
因为我不想在每个按钮上绑定Background,所以我尝试将它添加到这样的样式:

<Style x:Key="BasicButton" targettype="Button">
            <Setter Property="Background" Value="{Binding ButtonColor,Source={StaticResource Appviewmodel}}" />
</Style>

但是现在当颜色变量在运行应用程序期间发生变化时,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本身.我不确定这是否有副作用,我将不得不挖掘更多.如果我找到了,我会回来的.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...