gpt4 book ai didi

c# - 如何在样式中设置绑定(bind)?

转载 作者:行者123 更新时间:2023-11-30 12:57:40 27 4
gpt4 key购买 nike

我对 Xaml 还很陌生。
我正在学习 UWP(通用 Windows 平台),我有更多按钮,我想将它们的 Background 属性绑定(bind)到 ViewModel 的属性,该属性会在某些事件期间发生变化。

我实现了 INotifyPropertyChanged,当我在 XAML 的按钮声明中绑定(bind) Background 属性时,一切正常(按钮的颜色发生变化):

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

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

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

但现在当应用程序运行期间颜色变量发生变化时,UI 不再更新。样式中的绑定(bind)属性似乎不响应变量的变化。

我做错了什么?感谢您的任何回答。

最佳答案

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

看来是因为我们uwp/winrt中没有DynamicResource,所以我们得搞个trick:我们重新导航到同一帧。所以在我们改变属性之后,我们必须做这样的事情:

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

这就像使 Windows 窗体中的控件无效一样。它正在使 UI 重绘自身。我不确定这是否有副作用,我将不得不挖掘更多。如果我找到任何东西,我会回来的。

关于c# - 如何在样式中设置绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33167714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com