簡體   English   中英

Xamarin.Forms 數據綁定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM