xamarin 绑定不适用于平台相关行为

chhkpiq4  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(184)

当我试图创建自己的自定义行为时,绑定到可观察属性不起作用。在任何社区mvvm工具包平台行为中也不起作用:
https://github.com/CommunityToolkit/Maui/tree/main/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors
StatusBarBehavior为例,编写如下内容

<ContentPage.Behaviors>
        <toolkit:StatusBarBehavior StatusBarColor="{Binding StatusBarColorProp}" StatusBarStyle="LightContent" />
    </ContentPage.Behaviors>

在视图模型中创建属性

[ObservableProperty]
    private Color _statusBarColorProp;

你会看到状态栏的颜色不会随着StatusBarBehavior属性在运行时的改变而改变。其他行为也一样。它对StatusBarColor="Red"这样的非绑定setter也很有效。
我想知道这是一个功能或错误,或我错过了什么。

更新已报告问题https://github.com/dotnet/maui/issues/11729

xytpbqjk

xytpbqjk1#

我可以复制你的问题。事实证明,我们只能改变StatusBarColor的颜色,要么在代码后面,如下面所示,要么像你提到的StatusBarColor="Red"的非绑定设置器。
第一个
当绑定到一个可观察的属性时,它无法改变StatusBarColor的颜色。这可能是一个潜在的问题,我建议你在Github中引发一个Bug Report

new9mtju

new9mtju2#

请在github maui issues上提交一个错误问题。
在此期间,尝试这个恶心的黑客在你的财产之一:

static public BindableProperty MyValueProperty = BindableProperty.Create(...,
  propertyChanged: (bindable, oldValue, newValue) =>
  {
    var it = (MyClass)bindable;
    // If it is changing, force explicit OnPropertyChanged. This is usually redundant,
    // but might help a binding "cascade" to dependencies.
    if (!(MyType)newValue.Equals((MyType)oldvalue))
      it.OnPropertyChanged(nameof(MyValue));
  });
public MyType MyValue
{
  get => (MyType)GetValue(MyValueProperty);
  set => SetValue(MyValueProperty, value);
}

相关问题