![](/img/trans.png)
[英]Xamarin Forms Collectionview not showing anything on UI even when binding is set and data is added to observable collection
[英]ListView Not showing anything about observable collection data binding
在視圖中,我有一個ListView,應顯示為帶有數據綁定和Observable字符串集合的數據,但不顯示任何內容
如果我不是標簽,而是放置標簽,並且可觀察的集合將其變成一個簡單的字符串,那么我將看到數據
在主視圖中:
<ListView Grid.Row="1" Grid.Column="1" ItemsSource="{Binding SerialsPorts}">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding SerialPortName}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在主ViewModel中
class BrightnessSerialsPortsViewModel : INotifyPropertyChanged, IBrightnessSerialsPortsViewModel
{
//readonly IPageDialogService pageDialogService;
readonly IBrightnessSerialsPortsManager manager;
public BrightnessSerialsPortsViewModel()
{
//pageDialogService = new PageDialogService();
manager = new BrightnessSerialsPortsManager();
manager.BrightnessInfoUpdated += OnBrightnessInfoUpdated;
manager.DeviceSerialPortsInfoUpdated += OnDeviceSerialsPortsInfoUpdated;
PageAppearingCommand = new Command(OnPageAppearing);
PageDisappearingCommand = new Command(OnPageDisappearing);
}
void OnPageAppearing()
{
//pageDialogService.DisplayAlert("Invoke Command Demo Page", "Appearing event fired.", "OK");
manager.GetBrightness();
manager.GetSerialsPorts();
}
void OnPageDisappearing()
{
//pageDialogService.DisplayAlert("Invoke Command Demo Page", "Disappearing event fired.", "OK");
SerialTest = "";
}
private void OnDeviceSerialsPortsInfoUpdated(object sender, IDeviceSerialsPortsInfoEventArgs e)
{
foreach(string device in e.DeviceSerialsPorts.Devices)
{
ISerialsPortsViewModel serialsPortsViewModel = new SerialsPortsViewModel(device);
SerialsPorts.Add(serialsPortsViewModel);
SerialTest += device + Environment.NewLine;
}
}
private void OnBrightnessInfoUpdated(object sender, IBrightnessInfoEventArgs e)
{
float f = e.DeviceBrightness.Brightness;
decimal dec = new decimal(f);
Brightness = (double) dec;
}
//public ICommand ChangeBrightnessCommand { get; set; }
public ICommand PageAppearingCommand { get; private set; }
public ICommand PageDisappearingCommand { get; private set; }
public ICommand ChangeBrightnessCommand => new RelayCommand(() => ExcecuteChangeBrightnessCommand());
public void ExcecuteChangeBrightnessCommand()
{
}
private ObservableCollection<ISerialsPortsViewModel> serialsPorts = new ObservableCollection<ISerialsPortsViewModel>();
public ObservableCollection<ISerialsPortsViewModel> SerialsPorts { get=> serialsPorts ; set { serialsPorts = value; OnPropertyChanged(nameof(SerialsPorts)); } }
private string serialstest = "";
public string SerialTest { get => serialstest; set {serialstest = value ; OnPropertyChanged(nameof(SerialTest)); } }
private double brightness = 1.0;
public double Brightness { get => brightness; set {brightness = value ; OnPropertyChanged(nameof(Brightness)); } }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
在SerialPorts ViewModel中:
public SerialsPortsViewModel(string serialPortName)
{
SerialPortName = serialPortName;
}
private string serialPortName;
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public string SerialPortName { get=> serialPortName; set {serialPortName = value ; OnPropertyChanged(nameof(SerialPortName)); } }
我究竟做錯了什么?
解決了將視圖更改為此:
<ListView Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding SerialsPorts}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell Height="60">
<StackLayout Orientation="Horizontal">
<BoxView BackgroundColor="Blue" WidthRequest="10" Margin="0,0,0,10" />
<StackLayout BackgroundColor="White" Orientation="Vertical" Margin="5,5,10,5">
<Label Text="{Binding SerialPortName}" FontAttributes="Bold" />
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.