如何在Xamarin表单中分别在ListView的所有项中运行StartTimer
我试着运行5个城市的时钟,比如listview每个单元格中的每个城市,时钟(本地时间)在城市名称之外运行。(截图附在下面) 我使用该城市的偏移值得到该城市的当地时间 为了让时钟移动,我使用了StartTimer,所以时间每秒钟都会改变 目前,我得到的偏移值为零,因此所有城市的UTC时间相同 我希望所有城市的名字旁边都显示当地时间,时钟必须每秒钟移动一次 任何帮助都将不胜感激。。 提前谢谢如何在Xamarin表单中分别在ListView的所有项中运行StartTimer,listview,xamarin.forms,Listview,Xamarin.forms,我试着运行5个城市的时钟,比如listview每个单元格中的每个城市,时钟(本地时间)在城市名称之外运行。(截图附在下面) 我使用该城市的偏移值得到该城市的当地时间 为了让时钟移动,我使用了StartTimer,所以时间每秒钟都会改变 目前,我得到的偏移值为零,因此所有城市的UTC时间相同 我希望所有城市的名字旁边都显示当地时间,时钟必须每秒钟移动一次 任何帮助都将不胜感激。。 提前谢谢 List items=newlist(); 添加(新的OffsetItems(){CityName=“Hy
List items=newlist();
添加(新的OffsetItems(){CityName=“Hyderabad”,Offset=5.5});
添加(新的OffsetItems(){CityName=“London”,Offset=1});
添加(新的OffsetItems(){CityName=“Tokyo”,Offset=9});
添加(新的OffsetItems(){CityName=“newyork”,Offset=-5});
添加(新的OffsetItems(){CityName=“Dubai”,Offset=4});
ListView lv=新建ListView
{
SeparatorVisibility=SeparatorVisibility.None,
ItemsSource=项目,
ItemTemplate=新数据模板(()=>
{
标签cityL=新标签()
{
TextColor=Color.Black,
HorizontalTextAlignment=TextAlignment.Start,
FontSize=Device.GetNamedSize(NamedSize.Small,新标签())
};
标签时间=新标签()
{
TextColor=Color.Black,
HorizontalTextAlignment=TextAlignment.Center,
FontSize=Device.GetNamedSize(NamedSize.Small,新标签())
};
cityL.SetBinding(Label.TextProperty,indexer=>indexer.CityName);
标签ll=新标签();
Device.StartTimer(TimeSpan.FromSeconds(1),()=>{
ll.SetBinding(Label.TextProperty,indexer=>indexer.Offset);
双偏移值=Convert.ToDouble(ll.Text);
timeL.Text=DateTime.UtcNow.AddHours(offsetValue).ToString(“hh:mm:ss tt,ddd dd MMM yyyy”);
返回true;
});
返回新的ViewCell
{
视图=新堆栈布局
{
方向=堆叠方向。水平,
孩子们=
{
城市,
时间
}
}
};
})
};
内容=新的堆栈布局
{
儿童={
吕
}
};
我认为您的模板中不应该有StartTimer。例如,在OnAppearing方法中应该有一个StartTimer
当StartTimer事件上升时,您应该更改模型中应有的“时间”属性(将“时间”属性更改为ObservableCollection中的所有项…您不应该使用“列表”)。将此“时间”属性绑定到“timeL”字段。现在,如果您实现INotifyPropertyChanged,您的timeL字段应该会自动更新。我已经为Alessandro提到的内容添加了代码,这就是应该如何完成的
class OffsetItems : INotifyPropertyChanged
{
private double _offset;
private string _time;
private string _cityName;
public string CityName
{
get { return _cityName; }
internal set
{
_cityName = value;
OnPropertyChanged("CityName");
}
}
public string Time
{
get { return _time; }
internal set
{
_time = value;
OnPropertyChanged("Time");
}
}
public double Offset
{
get { return _offset; }
internal set
{
_offset = value;
OnPropertyChanged("Offset");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public partial class MainPage : ContentPage
{
ObservableCollection<OffsetItems> Items = new ObservableCollection<OffsetItems>();
public MainPage()
{
InitializeComponent();
Items.Add(new OffsetItems() { CityName = "Hyderabad", Offset = 5.5 });
Items.Add(new OffsetItems() { CityName = "London", Offset = 1 });
Items.Add(new OffsetItems() { CityName = "Tokyo", Offset = 9 });
Items.Add(new OffsetItems() { CityName = "New York", Offset = -5 });
Items.Add(new OffsetItems() { CityName = "Dubai", Offset = 4 });
var lv = new ListView
{
ItemsSource = Items,
SeparatorVisibility = SeparatorVisibility.None,
ItemTemplate = new DataTemplate(() =>
{
Label cityL = new Label()
{
TextColor = Color.Black,
HorizontalTextAlignment = TextAlignment.Start,
FontSize = Device.GetNamedSize(NamedSize.Small, new Label())
};
Label timeL = new Label()
{
TextColor = Color.Black,
HorizontalTextAlignment = TextAlignment.Center,
FontSize = Device.GetNamedSize(NamedSize.Small, new Label())
};
cityL.SetBinding<OffsetItems>(Label.TextProperty, indexer => indexer.CityName);
timeL.SetBinding<OffsetItems>(Label.TextProperty, indexer => indexer.Time, BindingMode.OneWay);
Label ll = new Label();
return new ViewCell
{
View = new StackLayout
{
Orientation = StackOrientation.Horizontal,
Children =
{
cityL,
timeL
}
}
};
})
};
Content = new StackLayout
{
Children = {
lv
}
};
}
protected override void OnAppearing()
{
base.OnAppearing();
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
Items.ForEach(row => row.Time = DateTime.UtcNow.AddHours(row.Offset)
.ToString("hh:mm:ss tt, ddd dd-MMM-yyyy"));
return true;
});
}
}
class OffsetItems:INotifyPropertyChanged
{
私人双U补偿;
私有字符串时间;
私有字符串_cityName;
公共字符串城市名称
{
获取{return\u cityName;}
内部集
{
_cityName=值;
OnPropertyChanged(“CityName”);
}
}
公共字符串时间
{
获取{return\u time;}
内部集
{
_时间=价值;
不动产变更(“时间”);
}
}
公共双偏移
{
获取{return\u offset;}
内部集
{
_偏移量=值;
不动产变更(“抵销”);
}
}
公共事件属性更改事件处理程序属性更改;
受保护的虚拟void OnPropertyChanged(字符串propertyName)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}
公共部分类主页:ContentPage
{
ObservableCollection Items=新的ObservableCollection();
公共主页()
{
初始化组件();
添加(新的OffsetItems(){CityName=“Hyderabad”,Offset=5.5});
添加(新的OffsetItems(){CityName=“London”,Offset=1});
添加(新的OffsetItems(){CityName=“Tokyo”,Offset=9});
添加(新的OffsetItems(){CityName=“newyork”,Offset=-5});
添加(新的OffsetItems(){CityName=“Dubai”,Offset=4});
var lv=新列表视图
{
ItemsSource=项目,
SeparatorVisibility=SeparatorVisibility.None,
ItemTemplate=新数据模板(()=>
{
标签cityL=新标签()
{
TextColor=Color.Black,
HorizontalTextAlignment=TextAlignment.Start,
FontSize=Device.GetNamedSize(NamedSize.Small,新标签())
};
标签时间=新标签()
{
TextColor=Color.Black,
HorizontalTextAlignment=TextAlignment.Center,
FontSize=Device.GetNamedSize(NamedSize.Small,新标签())
};
塞宾丁城市酒店
class OffsetItems : INotifyPropertyChanged
{
private double _offset;
private string _time;
private string _cityName;
public string CityName
{
get { return _cityName; }
internal set
{
_cityName = value;
OnPropertyChanged("CityName");
}
}
public string Time
{
get { return _time; }
internal set
{
_time = value;
OnPropertyChanged("Time");
}
}
public double Offset
{
get { return _offset; }
internal set
{
_offset = value;
OnPropertyChanged("Offset");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public partial class MainPage : ContentPage
{
ObservableCollection<OffsetItems> Items = new ObservableCollection<OffsetItems>();
public MainPage()
{
InitializeComponent();
Items.Add(new OffsetItems() { CityName = "Hyderabad", Offset = 5.5 });
Items.Add(new OffsetItems() { CityName = "London", Offset = 1 });
Items.Add(new OffsetItems() { CityName = "Tokyo", Offset = 9 });
Items.Add(new OffsetItems() { CityName = "New York", Offset = -5 });
Items.Add(new OffsetItems() { CityName = "Dubai", Offset = 4 });
var lv = new ListView
{
ItemsSource = Items,
SeparatorVisibility = SeparatorVisibility.None,
ItemTemplate = new DataTemplate(() =>
{
Label cityL = new Label()
{
TextColor = Color.Black,
HorizontalTextAlignment = TextAlignment.Start,
FontSize = Device.GetNamedSize(NamedSize.Small, new Label())
};
Label timeL = new Label()
{
TextColor = Color.Black,
HorizontalTextAlignment = TextAlignment.Center,
FontSize = Device.GetNamedSize(NamedSize.Small, new Label())
};
cityL.SetBinding<OffsetItems>(Label.TextProperty, indexer => indexer.CityName);
timeL.SetBinding<OffsetItems>(Label.TextProperty, indexer => indexer.Time, BindingMode.OneWay);
Label ll = new Label();
return new ViewCell
{
View = new StackLayout
{
Orientation = StackOrientation.Horizontal,
Children =
{
cityL,
timeL
}
}
};
})
};
Content = new StackLayout
{
Children = {
lv
}
};
}
protected override void OnAppearing()
{
base.OnAppearing();
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
Items.ForEach(row => row.Time = DateTime.UtcNow.AddHours(row.Offset)
.ToString("hh:mm:ss tt, ddd dd-MMM-yyyy"));
return true;
});
}
}