[英]Xamarin.Forms data binding
有沒有機會從code behind
訪問我的 listview/listview.itemtemplate/datatemplate/viewcell 中的選擇器?
首先我想擺脫x:Array String
,然后我想從數據庫中獲取數據並在 OnApearing() 方法中綁定到我的選擇器,在我選擇選擇器數據后它會更新我的數據庫
<Picker Title="Select text"
x:Name="Picker"
HorizontalOptions="StartAndExpand"
VerticalOptions="Center"
FontSize="20"
SelectedIndexChanged="Picker_SelectedIndexChanged">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Text1</x:String>
<x:String>Text2</x:String>
<x:String>Text3</x:String>
<x:String>Text4</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
感謝幫助 :)
You could use list in list when the picker is in the ViewCell
<ListView ItemsSource="{Binding MyItems}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid BackgroundColor="#eee" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Text="{Binding Content}" TextColor="Red" />
<Picker Grid.Row="1" ItemsSource="{Binding PickerSource}" SelectedItem="{Binding SelectedValue}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
public class MyViewModel: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public ObservableCollection<MyModel> MyItems { get; set; }
public MyViewModel()
{
// I used local data just for demo, you could get it from DB
MyItems = new ObservableCollection<MyModel>()
{
new MyModel(){Content="items1",PickerSource = new ObservableCollection<string>(){"option1","option2","option3" } },
new MyModel(){Content="items2",PickerSource = new ObservableCollection<string>(){"option1","option2","option3" } },
new MyModel(){Content="items3",PickerSource = new ObservableCollection<string>(){"option1","option2","option3" } },
new MyModel(){Content="items4",PickerSource = new ObservableCollection<string>(){"option1","option2","option3" } },
new MyModel(){Content="items5",PickerSource = new ObservableCollection<string>(){"option1","option2","option3" } },
new MyModel(){Content="items6",PickerSource = new ObservableCollection<string>(){"option1","option2","option3" } },
new MyModel(){Content="items7",PickerSource = new ObservableCollection<string>(){"option1","option2","option3" } },
};
foreach(var model in MyItems)
{
model.PropertyChanged += Model_PropertyChanged;
}
}
private void Model_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName== "SelectedValue")
{
var SelectedModel = sender as MyModel;
var SelectedValue = SelectedModel.SelectedValue;
//... do something you want
}
}
}
public class MyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public ObservableCollection<string> PickerSource { get; set; }
public string Content { get; set; }
string selectedValue;
public string SelectedValue
{
get { return selectedValue; }
set
{
selectedValue = value;
NotifyPropertyChanged("SelectedValue");
}
}
//other properties
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.