如何将列表视图项目绑定到页面的 Viewmodel?

我想将项目绑定ListView到 ViewModel 中的属性而不是 ItemsSource,但在尝试后Binding Source={x:Reference Name=ThisPage} Path=ViewModel.TimerValue它不起作用。我做错了什么。无法识别


我试过设置:


Text="{Binding Path=TimerValue, TargetNullValue='00:00', FallbackValue='00:00', StringFormat='{0:mm\\:ss}', Source={x:Reference Name=ThisPage}}"

ViewModel 确实实现了 INotifyPropertyChanged 并引发了 PropertyChanged 事件


页面标题 - 参考


<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"

             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

             xmlns:d="http://xamarin.com/schemas/2014/forms/design"

             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

             mc:Ignorable="d"

             x:Class="App3.Views.MyPage"

             x:Name="ThisPage">

<ListView x:Name="listView" ItemsSource={Binding Items}>

                <ListView.ItemTemplate>

                    <DataTemplate>

                        <ViewCell>

                            <Label Text="{Binding Path=TimerValue, TargetNullValue='00:00', FallbackValue='00:00', StringFormat='{0:mm\\:ss}', Source={x:Reference Name=ThisPage}}" />

                        </ViewCell>

                    </DataTemplate>

                </ListView.ItemTemplate>

            </ListView>

代码隐藏


 private MyViewModel ViewModel;

 public MyPage () {

     InitializeComponent ();

     ViewModel = new MyViewModel ();

     this.BindingContext = ViewModel;

 }


LEATH
浏览 162回答 3
3回答

慕婉清6462132

我解决了它如下<Label Text="{Binding TimerValue, TargetNullValue='00:00', FallbackValue='00:00', StringFormat='{0:mm\\:ss}'}"&nbsp; &nbsp; &nbsp; &nbsp; BindingContext="{Binding Source={x:Reference MyPage}, Path=BindingContext}">绑定错误的原因,BindingContext必须是BindableObject。 BindingContext是可绑定对象,它又引用ViewModel对象,并且Label.Text必须是BindableProperty可绑定对象。当我引用它时Text={Binding ViewModel.TimerValue,它试图在中找到可绑定属性,Mypage但是ViewModel它只是一个公共属性,而不是 Bindable 对象BindingContext = ViewModel将其转换为 Bindable 对象,因此我不得不对 Source 使用这种方式,而 Text 只是调用该引用的 bindingcontext 的路径感谢所有的建议!非常感谢这个社区的及时响应!

蝴蝶刀刀

迟到的答案,但可能会对某人有所帮助。如果您在后面的代码中编写布局。您可以以这种方式将上下文绑定到源视图模型上下文。我将一个按钮绑定到视图模型中的命令。btn.SetBinding(Button.CommandProperty, new Binding("BindingContext.YourCommand", source: YourListView));btn.SetBinding(Button.CommandParameterProperty, ".");

炎炎设计

两步..为您的父视图提供一个引用名称x:Name="viewName"(绑定到 ViewModel 的视图)绑定如下:&nbsp;"{Binding BindingContext.MenuTapCommand, Source={x:Reference viewName}}"这行得通。
打开App,查看更多内容
随时随地看视频慕课网APP