是否可以为视单元编写一些逻辑并从此视单元字段中获取值?
Is it possible to write some logic for a viewcell and get a value from this this viewcell field?
是否可以创建一个包含两个 Buttons
和 Label
的 ListView
和 ViewCells
,第一个按钮是“+”,第二个按钮是“-”标签将是一个计数器,显示点击了多少“+”按钮。
然后我希望能够从我的列表视图中获取绑定到此视单元的项目以及有关已选择该项目多少的信息。
现在我创建了一个 StackLayout
填充 Views
那就是 "mocks" 一个 Viewcells
。这个解决方案对很多项目来说太糟糕了,因为我必须创建很多 Views
(这需要几秒钟)。
所以我想使用 ListView
来解决问题,但我不知道如何实现。或者也许您有比使用列表视图更好的解决方案?
这应该是微不足道的。首先,创建一个数据结构来保存你的数据
public class MyData : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private double _count;
public double Count
{
get
{ return _count; }
set
{
_count = value;
NotifyPropertyChanged();
}
}
List<MyData> data { get; set; }
您需要用您想要在列表中显示的行数来初始化它。创建一个模板,其中包含绑定到您的计数的标签和按钮 属性
<ListView x:Name="listView" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding Count}" />
<Button Clicked="Increment" CommandParameter="{Binding .}" Text="+" />
<Button Clicked="Decrement" CommandParameter="{Binding .}" Text="-" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在您的代码隐藏中
protected void Decrement(object sender, EventArgs args) {
var b = (Button)sender;
var data = (MyData)b.CommandParameter;
data.Count--;
}
protected void Increment(object sender, EventArgs args) {
var b = (Button)sender;
var data = (MyData)b.CommandParameter;
data.Count++;
}
最后,使用绑定或者直接赋值设置List的ItemsSourcee
listView.ItemsSource = data;
是否可以创建一个包含两个 Buttons
和 Label
的 ListView
和 ViewCells
,第一个按钮是“+”,第二个按钮是“-”标签将是一个计数器,显示点击了多少“+”按钮。
然后我希望能够从我的列表视图中获取绑定到此视单元的项目以及有关已选择该项目多少的信息。
现在我创建了一个 StackLayout
填充 Views
那就是 "mocks" 一个 Viewcells
。这个解决方案对很多项目来说太糟糕了,因为我必须创建很多 Views
(这需要几秒钟)。
所以我想使用 ListView
来解决问题,但我不知道如何实现。或者也许您有比使用列表视图更好的解决方案?
这应该是微不足道的。首先,创建一个数据结构来保存你的数据
public class MyData : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private double _count;
public double Count
{
get
{ return _count; }
set
{
_count = value;
NotifyPropertyChanged();
}
}
List<MyData> data { get; set; }
您需要用您想要在列表中显示的行数来初始化它。创建一个模板,其中包含绑定到您的计数的标签和按钮 属性
<ListView x:Name="listView" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding Count}" />
<Button Clicked="Increment" CommandParameter="{Binding .}" Text="+" />
<Button Clicked="Decrement" CommandParameter="{Binding .}" Text="-" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在您的代码隐藏中
protected void Decrement(object sender, EventArgs args) {
var b = (Button)sender;
var data = (MyData)b.CommandParameter;
data.Count--;
}
protected void Increment(object sender, EventArgs args) {
var b = (Button)sender;
var data = (MyData)b.CommandParameter;
data.Count++;
}
最后,使用绑定或者直接赋值设置List的ItemsSourcee
listView.ItemsSource = data;