【问题标题】:Add Complex argument for viewmodel constructor in XAML在 XAML 中为 viewmodel 构造函数添加复杂参数
【发布时间】:2020-09-14 19:15:27
【问题描述】:

Flexlayout有可绑定的Item源

<FlexLayout x:Name="playerscollection" Wrap="Wrap" BindableLayout.ItemsSource="{Binding Players}" />

视图模型中的项目定义为

public ObservableCollection<PlayerModel> Players { get; set; }

FlexLayout 数据模板是一个内容视图 我需要分配一个特定的视图模型“PlayerViewModel”作为内容视图 BindingContext

    public PlayerViewModel(bool showPicker = true, PlayerModel player = null){}

所以在 FlexLayout 中,

<FlexLayout x:Name="playerscollection" Wrap="Wrap" BindableLayout.ItemsSource="{Binding Players}">
                                            <views:PlayerView >
                                                <views:PlayerView.BindingContext>
                                                    <viewModels:PlayerViewModel>
                                                        <x:Arguments>
                                                            <x:Boolean>False</x:Boolean>
                                                            <models:PlayerModel/>
                                                        </x:Arguments>
                                                    </viewModels:PlayerViewModel>
                                                </views:PlayerView.BindingContext>
                                            </views:PlayerView>
</FlexLayout>

但错误提示“类型 'PlayerViewModel' 不能用作对象元素,因为它不是公共的或未定义公共无参数构造函数或类型转换器”

【问题讨论】:

  • 你试过给PlayerViewModel.cs添加一个空的构造函数吗?
  • 为什么?我需要通过在播放器视图中为相应属性绑定的列表项
  • 您仍在使用带参数的构造函数,但是,错误确实提到您没有定义无参数构造函数。框架本身在尝试首先在幕后构建 UI 时可能正在寻找它。

标签: xaml xamarin xamarin.forms viewmodel


【解决方案1】:

我创建了一个基本演示来测试代码并重现错误。该错误不会影响项目构建,它只是 IDE 的 intellisense 错误。请忽略错误并部署代码,它会正常工作。

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多