Xamarin.forms 如何在xamarin表单的列表视图中动态设置项目的元素可见性
我正在尝试用Xamarin表单创建一个页面,它模仿HTML中的表格样式。我希望标题和数据能够根据条件删除或显示。我的问题是我无法找到一种方法来访问列表视图的ViewCell中的某些属性 我的XAML代码是这样的Xamarin.forms 如何在xamarin表单的列表视图中动态设置项目的元素可见性,xamarin.forms,Xamarin.forms,我正在尝试用Xamarin表单创建一个页面,它模仿HTML中的表格样式。我希望标题和数据能够根据条件删除或显示。我的问题是我无法找到一种方法来访问列表视图的ViewCell中的某些属性 我的XAML代码是这样的 <Grid x:DataType="models:TransactionHistory" > <Grid.ColumnDefinitions> <ColumnDefinition
<Grid x:DataType="models:TransactionHistory" >
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Grid.Column="0"
Text="Tran Number"
x:Name="LabelTranNumber"
IsVisible="{Binding ShowTransactionNumberColumn}"/>
<Label Grid.Row="0"
Grid.Column="1"
Text="Description"
x:Name="LabelDescription"
IsVisible="{Binding ShowDescriptionColumn}"/>
<Label
Grid.Row="0"
Grid.Column="2"
Text="Quantity"
x:Name="LabelQuantity"
IsVisible="{Binding ShowQuantityColumn}"
/>
<Label
Grid.Row="0"
Grid.Column="3"
Text="Date"
x:Name="LabelDate"
IsVisible="{Binding ShowDateRaisedColumn}"/>
<Label
Grid.Row="0"
Grid.Column="4"
Text="Extension"
x:Name="LabelExtension"
IsVisible="{Binding ShowExtensionColumn}"/>
<ListView
Grid.Column="0"
Grid.Row="1"
Grid.ColumnSpan="{Binding NumberOfVisibleColumns}"
x:Name="ListViewTransactionHistory">
<ListView.ItemTemplate >
<DataTemplate x:DataType="models:History" >
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label
Grid.Column="0"
Text="{Binding TransactionNumber}"
IsVisible="{Binding??? }"/> --- How do I access ShowTransactionNumber field here?
<Label Grid.Row="0"
Grid.Column="1"
Text="{Binding Description}" />
<Label
Grid.Column="2"
Text="{Binding Quantity}" />
<Label
Grid.Column="3"
Text="{Binding DateRaised}" />
<Label
Grid.Column="4"
Text="{Binding FormattedExtension}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
public class TransactionHistory
{
public bool ShowTransactionNumberColumn { get; set; }
public bool ShowDescriptionColumn { get; set; }
public bool ShowQuantityColumn { get; set; }
public bool ShowDateRaisedColumn { get; set; }
public bool ShowExtensionColumn { get; set; }
public int NumberOfVisibleColumns {
get
{
int numberOfVisibleColumns = 0;
if (ShowTransactionNumberColumn) numberOfVisibleColumns++;
if (ShowDescriptionColumn) numberOfVisibleColumns++;
if (ShowQuantityColumn) numberOfVisibleColumns++;
if (ShowDateRaisedColumn) numberOfVisibleColumns++;
if (ShowExtensionColumn) numberOfVisibleColumns++;
return numberOfVisibleColumns;
}
}
public List<History> TransactionHistories { get; set; }
}
public class History
{
public string TransactionNumber { get; set; }
public string Description { get; set; }
public decimal Quantity { get; set; }
public string DateRaised { get; set; }
public decimal Extension { get; set; }
public string FormattedExtension { get; set; }
}
public TransactionHistory GetTransactions()
{
TransactionHistory transaction = new TransactionHistory
{
ShowDescriptionColumn = true,
ShowQuantityColumn = true,
ShowDateRaisedColumn = true,
ShowExtensionColumn = true,
ShowTransactionNumberColumn = true,
TransactionHistories = new List<History>
{
new History
{
DateRaised = DateTime.Now.ToShortDateString(),
Description = "SMITH CHIPS ",
Extension = 2.25M,
FormattedExtension = 2.25.ToString("C"),
Quantity = 2,
TransactionNumber = "1234"
},
new History
{
DateRaised = DateTime.Now.ToShortDateString(),
Description = "SMITH CHIPS ",
Extension = 2.25M,
FormattedExtension = 2.25.ToString("C"),
Quantity = 2,
TransactionNumber = "1234"
},
new History
{
DateRaised = DateTime.Now.ToShortDateString(),
Description = "SMITH CHIPS ",
Extension = 2.25M,
FormattedExtension = 2.25.ToString("C"),
Quantity = 2,
TransactionNumber = "1234"
}
}
};
return transaction;
}
我的问题是如何将事务历史模型绑定到视图,以便使用TransactionHistories初始化列表视图。如何访问单元格内的布尔变量以切换单元格内元素的可见性
在代码隐藏中,我可以像这样设置列表视图的源代码。但我不能接触布尔人
ListViewTransactionHistory.ItemsSource = transactionHistory.TransactionHistories;
我想我做错了什么。任何想法都会有帮助。非常感谢:)
编辑:
在OnAppearing方法背后的代码中,我正在这样做
protected override void OnAppearing()
{
TransactionHistoryStore transactionHistoryStore = new TransactionHistoryStore();
TransactionHistory transactionHistory = transactionHistoryStore.GetTransactions();
if (transactionHistory == null) return;
LabelTranNumber.IsVisible = transactionHistory.ShowTransactionNumberColumn;
LabelDescription.IsVisible = transactionHistory.ShowDescriptionColumn;
LabelDate.IsVisible = transactionHistory.ShowDateRaisedColumn;
LabelExtension.IsVisible = transactionHistory.ShowExtensionColumn;
// NumberOfVisibleColumns = numberOfVisibleColumns;
ListViewTransactionHistory.ItemsSource = transactionHistory.TransactionHistories;
}
因此,不要手动设置IsVisible属性。如何绑定transactionHistory变量
transactionHistoryVariable如下所示
<Grid x:DataType="models:TransactionHistory" >
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Grid.Column="0"
Text="Tran Number"
x:Name="LabelTranNumber"
IsVisible="{Binding ShowTransactionNumberColumn}"/>
<Label Grid.Row="0"
Grid.Column="1"
Text="Description"
x:Name="LabelDescription"
IsVisible="{Binding ShowDescriptionColumn}"/>
<Label
Grid.Row="0"
Grid.Column="2"
Text="Quantity"
x:Name="LabelQuantity"
IsVisible="{Binding ShowQuantityColumn}"
/>
<Label
Grid.Row="0"
Grid.Column="3"
Text="Date"
x:Name="LabelDate"
IsVisible="{Binding ShowDateRaisedColumn}"/>
<Label
Grid.Row="0"
Grid.Column="4"
Text="Extension"
x:Name="LabelExtension"
IsVisible="{Binding ShowExtensionColumn}"/>
<ListView
Grid.Column="0"
Grid.Row="1"
Grid.ColumnSpan="{Binding NumberOfVisibleColumns}"
x:Name="ListViewTransactionHistory">
<ListView.ItemTemplate >
<DataTemplate x:DataType="models:History" >
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label
Grid.Column="0"
Text="{Binding TransactionNumber}"
IsVisible="{Binding??? }"/> --- How do I access ShowTransactionNumber field here?
<Label Grid.Row="0"
Grid.Column="1"
Text="{Binding Description}" />
<Label
Grid.Column="2"
Text="{Binding Quantity}" />
<Label
Grid.Column="3"
Text="{Binding DateRaised}" />
<Label
Grid.Column="4"
Text="{Binding FormattedExtension}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
public class TransactionHistory
{
public bool ShowTransactionNumberColumn { get; set; }
public bool ShowDescriptionColumn { get; set; }
public bool ShowQuantityColumn { get; set; }
public bool ShowDateRaisedColumn { get; set; }
public bool ShowExtensionColumn { get; set; }
public int NumberOfVisibleColumns {
get
{
int numberOfVisibleColumns = 0;
if (ShowTransactionNumberColumn) numberOfVisibleColumns++;
if (ShowDescriptionColumn) numberOfVisibleColumns++;
if (ShowQuantityColumn) numberOfVisibleColumns++;
if (ShowDateRaisedColumn) numberOfVisibleColumns++;
if (ShowExtensionColumn) numberOfVisibleColumns++;
return numberOfVisibleColumns;
}
}
public List<History> TransactionHistories { get; set; }
}
public class History
{
public string TransactionNumber { get; set; }
public string Description { get; set; }
public decimal Quantity { get; set; }
public string DateRaised { get; set; }
public decimal Extension { get; set; }
public string FormattedExtension { get; set; }
}
public TransactionHistory GetTransactions()
{
TransactionHistory transaction = new TransactionHistory
{
ShowDescriptionColumn = true,
ShowQuantityColumn = true,
ShowDateRaisedColumn = true,
ShowExtensionColumn = true,
ShowTransactionNumberColumn = true,
TransactionHistories = new List<History>
{
new History
{
DateRaised = DateTime.Now.ToShortDateString(),
Description = "SMITH CHIPS ",
Extension = 2.25M,
FormattedExtension = 2.25.ToString("C"),
Quantity = 2,
TransactionNumber = "1234"
},
new History
{
DateRaised = DateTime.Now.ToShortDateString(),
Description = "SMITH CHIPS ",
Extension = 2.25M,
FormattedExtension = 2.25.ToString("C"),
Quantity = 2,
TransactionNumber = "1234"
},
new History
{
DateRaised = DateTime.Now.ToShortDateString(),
Description = "SMITH CHIPS ",
Extension = 2.25M,
FormattedExtension = 2.25.ToString("C"),
Quantity = 2,
TransactionNumber = "1234"
}
}
};
return transaction;
}
public TransactionHistory GetTransactions()
{
TransactionHistory transaction=新建TransactionHistory
{
ShowDescriptionColumn=true,
ShowQuantityColumn=true,
ShowDateRaisedColumn=true,
ShowExtensionColumn=true,
ShowTransactionNumberColumn=true,
TransactionHistories=新列表
{
新历史
{
DateRaised=DateTime.Now.ToSortDateString(),
Description=“史密斯芯片”,
延伸段=2.25米,
FormattedExtension=2.25.ToString(“C”),
数量=2,
TransactionNumber=“1234”
},
新历史
{
DateRaised=DateTime.Now.ToSortDateString(),
Description=“史密斯芯片”,
延伸段=2.25米,
FormattedExtension=2.25.ToString(“C”),
数量=2,
TransactionNumber=“1234”
},
新历史
{
DateRaised=DateTime.Now.ToSortDateString(),
Description=“史密斯芯片”,
延伸段=2.25米,
FormattedExtension=2.25.ToString(“C”),
数量=2,
TransactionNumber=“1234”
}
}
};
退货交易;
}
如果我理解你的问题
- 在XAML中,设置ListView项资源={Binding TransactionHistories}(看起来您已经设置了页面的绑定)
- 为了访问页面绑定,您必须使用这个小的 绑定技巧:
如果我能理解你的问题,我会更多地了解它
- 在XAML中,设置ListView项资源={Binding TransactionHistories}(看起来您已经设置了页面的绑定)
- 为了访问页面绑定,您必须使用这个小的 绑定技巧:
更多关于它的信息谢谢你的观点。这将帮助我更改可见性属性。但是如何将模型绑定到视图?我已经用我的数据格式更新了我的问题。@JivanBhandari如果认为您已经设置了页面绑定上下文,请将OnAppearing覆盖中的代码移到页面的构造函数中。现在,在其中写入BindingContext=transactionHistory,确保仅在transactionHistory!=无效的有关BIndingContext的更多信息,尽管看起来您没有遵循MvvM原则是的,我没有使用MvvM原则。我坚持MVC,但结果是它很混乱。谢谢你的意见。这将帮助我更改可见性属性。但是如何将模型绑定到视图?我已经用我的数据格式更新了我的问题。@JivanBhandari如果认为您已经设置了页面绑定上下文,请将OnAppearing覆盖中的代码移到页面的构造函数中。现在,在其中写入BindingContext=transactionHistory,确保仅在transactionHistory!=无效的有关BIndingContext的更多信息,尽管看起来您没有遵循MvvM原则是的,我没有使用MvvM原则。我坚持使用MVC,但事实证明它很混乱。