gpt4 book ai didi

c# - 根据 ViewModel 属性更改画笔

转载 作者:行者123 更新时间:2023-12-03 10:16:07 25 4
gpt4 key购买 nike

我有一个具有 CarViewModel 的应用程序+ view (UserControl)。
我想要实现的是在绑定(bind)DataContext Car.Status时改变画笔的样式变化。

我发现了如何更改画笔(在 View 后面的代码中):

private void LoadThemeResources(bool isPrepareMode)
{
if (isPrepareMode)
{
Uri themeUri = new Uri(@"/../Resources/MyBrushes.Light.xaml", UriKind.Relative);
ResourceDictionary themeDictionary = Application.LoadComponent(themeUri) as ResourceDictionary;
this.Resources.MergedDictionaries.Add(themeDictionary);
}
else
{
this.Resources.MergedDictionaries.Clear();
}
}

默认情况下,应用程序和所有内容都有一个分布在多个文件中的深色主题。这个 MyBrushes.Light覆盖其中一些。

但我不知道如何以 MVVM 友好的方式基于 ViewModel 中的属性更改来执行 LoadThemeResources 函数。

我可以在 View 后面的代码中做:
var vm = (CarViewModel) DataContext;
vm.Car.PropertyChanged += HandleStatusChanged;

但这是 View 之间的紧密耦合。和 ViewModel .

我也可以通过 Messenger(来自 MVVM Light)来做到这一点,但这会在整个应用程序中进行广播,而且似乎有点过分了。

还有其他方法吗?还是首选方式?

最佳答案

我会准备一些附加属性(用于 UserControl )。将该属性绑定(bind)到您的 View 模型并添加 LoadThemeResources 的代码逻辑在属性更改回调中,如下所示:

public static class ThemeService {
public static DependencyProperty IsPrepareModeProperty =
DependencyProperty.RegisterAttached("IsPrepareMode", typeof(bool), typeof(ThemeService),
new PropertyMetadata(isPrepareModeChanged));
public static bool GetIsPrepareMode(UserControl e){
return (bool) e.GetValue(IsPrepareModeProperty);
}
public static void SetIsPrepareMode(UserControl e, bool value){
e.SetValue(IsPrepareModeProperty, value);
}
static void isPrepareModeChanged(object sender, DependencyPropertyChangedEventArgs e){
var u = sender as UserControl;
u.LoadThemeResources((bool)e.NewValue);
}
}
//you need some public method of LoadThemeResources
public void LoadThemeResources(bool isPrepareMode) {
//...
}

XAML 中的用法 :
<UserControl ...
local:ThemeService.IsPrepareMode="{Binding Car.Status}">
<!-- ... -->
</UserControl>

你也可以声明一个普通的 DependencyProperty为您的 UserControl 的类并使用它而不是附加属性(用法相同)。

关于c# - 根据 ViewModel 属性更改画笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33042409/

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