【发布时间】:2019-05-31 05:28:10
【问题描述】:
虽然我尝试实现一个简单的命令,通过在视图模型中触发的命令来提升列表视图中进度条的属性,但该命令会发送到此页面。我不知道下一步该做什么,因为当我从 imagebutton assing 到同一个对象调用命令时,进度条不会增加?
点击图片按钮后的输出
Bidning: 'IncrementCommand property not found on AppDemo.Models.SampleObject, target property XamarinForms.ImageButtonCommand'
来自 Viewmodel 的代码:
public ICommand IncrementCommand { get; }
public MainViewModel(IPageServices pageServices)
{
this._pageServices = pageServices;
Wastes = GetObjects();
IncrementCommand = new Command(async () => await IncrementObject());
}
async Task IncrementObject()
{
await objectServices.IncrementObject(object);
OnPropertyChanged("SampleCounter");
}
调用Task的服务代码
public Task IncrementObject(ObjectModel object)
{
object.ObjectCounter += .1;
return objectRepository.Save(object);
}
模型从 Observable 对象继承 INotifyPropertyChanged
public class SampleModel: ObservableObject
{
public int? Id { get; set; }
public string SampleIcon{ get; set; }
public double SampleCounter{ get; set; }
}
MainPage xaml 文件中的代码
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ProgressBar x:Name="progressBar"
Grid.RowSpan="2" Grid.Row="0" Grid.Column="0"
BackgroundColor="Transparent"
ProgressColor="#614c96"
Progress="{Binding ObjectCounter}"
/>
<ImageButton x:Name="iconButton"
Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"
WidthRequest="100"
HeightRequest="100"
Aspect="AspectFit"
BackgroundColor="Transparent"
Source="{Binding ObjectIcon}"
Command="{x:Binding IncrementCommand}">
</ImageButton>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
Coede 表单页面代码隐藏
public MainPage()
{
InitializeComponent();
var pageServices = new PageServices();
BindingContext = new MainViewModel(pageServices);
}
我能解释一下我的错误吗?谢谢你
【问题讨论】:
-
ListView 中每个项目的 BindingContext 是 SampleModel,而不是 ViewModel
标签: c# xamarin mvvm xamarin.forms command