xamarin.forms 从自定义渲染器访问 viewmodel 属性

Posted

技术标签:

【中文标题】xamarin.forms 从自定义渲染器访问 viewmodel 属性【英文标题】:xamarin.forms access viewmodel property from custom renderer 【发布时间】:2017-06-28 18:00:57 【问题描述】:

我有一个自定义的 PageRenderer,其布局包含一个 ListView。

Droid 项目布局 MatchPage.xml:

<android.support.design.widget.CoordinatorLayout 
[...]
   <ListView
    android:id="@+id/scrollableview"
    android:layout_
    android:layout_/>
[...]
</android.support.design.widget.CoordinatorLayout 

Droid 项目自定义渲染器:

[assembly: ExportRenderer(typeof(MatchPage), typeof(MatchPageRenderer))]
namespace beSupporter.Droid.Renderers

    public class MatchPageRenderer : PageRenderer
    
        Activity activity;

        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
        
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            
                return;
            

                activity = this.Context as Activity;
                activity.SetContentView(Resource.Layout.MatchPage);

                var listView = (Android.Widget.ListView) this.FindViewById(Resource.Id.scrollableview);
                // HERE SET THE SOURCE
        
    

如果我的 xamarin.forms ViewModel 中有这个属性,如何设置 listView 的来源?

public List<Fact> Facts

【问题讨论】:

【参考方案1】:

通常你不会从渲染器设置源,我不确定你为什么需要这个。渲染器主要用于显示事物,而不是设置,但如果您坚持...

在渲染器中,您可以访问作为您的 MatchPage 的元素。我假设您将 ViewModel 作为页面的成员,因此您可以访问模型内​​的列表。

【讨论】:

是的,它运行良好。我能够从渲染器中检索视图模型。

以上是关于xamarin.forms 从自定义渲染器访问 viewmodel 属性的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 中的 Droid 自定义选取器渲染器出错

Xamarin.Forms 中 Picker 的自定义渲染器

MAUI 移植 Xamarin.Forms 自定义渲染器

Xamarin.Forms Timepicker IsVisible 属性与自定义渲染器

Xamarin Forms WinRT 条目自定义渲染器

Xamarin Forms 渲染器未响应事件更改