【发布时间】:2021-08-26 23:43:57
【问题描述】:
我是第一次尝试使用 MVVM 和 ListView。我在Xamarin.Forms multi column table GUI工作
我的 ViewModel 看起来像这样
public class CodeTableViewModel : BaseViewModel
{
public static ObservableCollection<CodeTableRow> CodeTable { get; set; }
public CodeTableViewModel()
{
}
public class CodeTableRow : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
int codePoint;
public CodeTableRow(int point)
{
codePoint = point;
}
public string Decimal
{
get
{
return codePoint.ToString("D");
}
}
public string Hex
{
get
{
return codePoint.ToString("X2");
}
}
public string Ascii
{
get
{
return ((char)codePoint).ToString();
}
}
...
我的 XAML 看起来像这样
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:viewmodels="clr-namespace:RefCard.ViewModels"
x:Class="RefCard.Views.CodeTablePage"
Title="Code Table">
<ContentPage.Content>
<ListView x:DataType="viewmodels:CodeTableViewModel" ItemsSource="{Binding CodeTable}">
<ListView.Header>
<Grid BackgroundColor="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Text="Dec" HorizontalOptions="Fill" Grid.Column="0" FontSize="Medium" FontAttributes="Bold" BackgroundColor="MediumBlue" TextColor="White" HorizontalTextAlignment="Center" Margin="1"/>
<Label Text="Hex" HorizontalOptions="Fill" Grid.Column="1" FontSize="Medium" FontAttributes="Bold" BackgroundColor="MediumBlue" TextColor="White" HorizontalTextAlignment="Center" Margin="0"/>
<Label Text="ASCII" HorizontalOptions="Fill" Grid.Column="2" FontSize="Medium" FontAttributes="Bold" BackgroundColor="MediumBlue" TextColor="White" HorizontalTextAlignment="Center" Margin="0"/>
</Grid>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid BackgroundColor="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Text ="{Binding Decimal}" HorizontalOptions="Fill" BackgroundColor="LightBlue" HorizontalTextAlignment="Center" Margin="1" TextColor="Black"></Label>
<Label Grid.Column="1" Text ="{Binding Hex}" HorizontalOptions="Fill" BackgroundColor="LightBlue" HorizontalTextAlignment="Center" Margin="0"></Label>
<Label Grid.Column="2" Text ="{Binding Ascii}" HorizontalOptions="Fill" BackgroundColor="LightBlue" HorizontalTextAlignment="Center" Margin="0"></Label>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
</ContentPage>
在页面构造函数中我做了CodeTableViewModel.CodeTable = new ObservableCollection<CodeTableViewModel.CodeTableRow>(); 和一堆Add。
我尝试破解一堆变体,但基本错误是 XFC0045 绑定:在“RefCard.ViewModels.CodeTableViewModel”上找不到属性“十进制”。 RefCard C:\Users\Charles\source\repos\RefCard\RefCard\Views\CodeTablePage.xaml 38
我该如何解决?
【问题讨论】:
-
1) 去掉
x:DataType="viewmodels:CodeTableViewModel",2)CodeTableRow的类定义不应该嵌套在CodeTableViewModel中,3)CodeTableViewModel应该在构造函数中初始化它的所有者属性,页面不应该这样做
标签: listview xamarin.forms data-binding