XAML 如何强制视图更新Xamarin Forms中的绑定属性?

vxqlmq5t  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(116)

我想在内容页面中强制更新数据绑定属性。在这种情况下,是ContentPageTitle参数。

<ContentPage x:Class="Containers.Views.ContainerPage" 
         xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         Title="{Binding SomeStringProperty}"
         Appearing="ContentPage_Appearing">

我得到的最接近的是这个,但它不起作用。

private void ContentPage_Appearing(object sender, EventArgs e)
    {
        this.BindingContext = null;
        this.BindingContext = myClassInstance;
    }

我不想实现onPropertyChange事件。我只是想“刷新”视图的绑定数据。

91zkwejq

91zkwejq1#

如果你的视图模型已经实现了INotifyPropertyChanged-你可以尝试用null/empty参数提升PropertyChangedEvent-这应该会强制更新所有绑定的属性-更多细节在这里。

public void RaiseAllProperties()
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(null));
}
93ze6v8z

93ze6v8z2#

我使用CustomView的一种方法是:

using Xamarin.Forms;

namespace Xam.CustomViews.ContentsViews
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class FeatherButton : ContentView
    {
        // ... Existing code ...

        public FeatherButton()
        {
            InitializeComponent();
            PropertyChanged += OnPropertyChanged;
        }

        private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == StyleProperty.PropertyName)
            {
                UpdateVisualProperties();
            }
        }

        private void UpdateVisualProperties()
        {
            OnPropertyChanged(nameof(TextColor));
            OnPropertyChanged(nameof(BackgroundColor));
            OnPropertyChanged(nameof(BorderColor));
            OnPropertyChanged(nameof(BorderWidth));
        }

        // ... Existing code ...
    }
}

相关问题