簡體   English   中英

如何以 Xamarin 形式(MVVM)設置 Picker 的默認值?

[英]How to set bydefault value of Picker in Xamarin form(MVVM)?

這是我使用選擇器的 Xaml 代碼:

<Picker
    ItemsSource="{Binding AttendanceDateList}" 
    ItemDisplayBinding="{Binding Date}"
    SelectedItem="{Binding AttendanceDate}"
    Title="Select">
</Picker>          

這是我的 MVVM 代碼,這是我的列表,以及綁定到所選項目的模型。 我看過很多解決方案,但沒有任何效果。

public ObservableCollection<AttendanceDate> AttendanceDateList { get; set; }
public ObservableCollection<MarkAttendance> AttendanceList {
    get
    {
        return _attendancelist;
    }
    set
    {
        _attendancelist = value;
        RaisePropertyChanged(() => AttendanceList);
    }
}

public AttendanceDate AttendanceDate
{
    get
    {
        return _attendanceDate;
    }
    set
    {
        _attendanceDate = value;
        RaisePropertyChanged(() => AttendanceDate);
    }
}

AttendanceDateList = new ObservableCollection<AttendanceDate>()
{
    new AttendanceDate(){AttendanceDateId=0 ,Date="Last Seven Days"},
    new AttendanceDate(){AttendanceDateId=1,Date="Last Fifteen Days"},
    new AttendanceDate(){AttendanceDateId=2,Date="Last Thirty Days"},
};

您必須使用源列表中的現有元素初始化綁定(在您的情況下是出席日期)。

例子:

XAML

<Picker
  ItemsSource="{Binding TestList}" 
  ItemDisplayBinding="{Binding Description}"
  SelectedItem="{Binding SelectedTest}"
  Title="Select">
</Picker>

視圖模型

    public ObservableCollection<TestModel> TestList { get; set; }

    public TestModel SelectedTest { get; set; }

    public SomeViewModel()
    {
        TestList = new ObservableCollection<TestModel>()
        {
            new TestModel { Description = "Last Seven Days"},
            new TestModel { Description = "Last Fifteen Days"},
            new TestModel { Description = "Last Thirty Days"},
        };

        SelectedTest = TestList[2];
    }

模型

public class TestModel
{
    public string Description { get; set; }
}

您可以設置SelectedItemSelectedIndex以使用選擇器默認值。

解決方案1:

添加attendanceDate = AttendanceDateList[0]; 在您的 ViewModel 中。

整個視圖模型:

 public class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public ObservableCollection<AttendanceDate> AttendanceDateList { get; set; }

    public AttendanceDate _attendanceDate;
    public AttendanceDate attendanceDate
    {
        get
        {
            return _attendanceDate;
        }
        set
        {
            _attendanceDate = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("_attendanceDate"));
        }
    }
    public ViewModel()
    {
        AttendanceDateList = new ObservableCollection<AttendanceDate>()
{
  new AttendanceDate() { AttendanceDateId = 0 ,Date = "Last Seven Days"},
  new AttendanceDate() { AttendanceDateId = 1,Date = "Last Fifteen Days"},
  new AttendanceDate() { AttendanceDateId = 2,Date = "Last Thirty Days"},
};
        attendanceDate = AttendanceDateList[0];
    }


    public class AttendanceDate
    {
        public int AttendanceDateId { get; set; }
        public string Date { get; set; }
    }
}

與您的相同的 xaml:

 <StackLayout>
    <Picker
        x:Name="picker"
        Title="Select"
        ItemDisplayBinding="{Binding Date}"
        ItemsSource="{Binding AttendanceDateList}"
        SelectedItem="{Binding attendanceDate}" />
</StackLayout>

代碼隱藏:

   public MainPage()
    {
        InitializeComponent();

        this.BindingContext = new ViewModel() ;
        //picker.SelectedIndex = 1;
    }

解決方案2:

您的 ViewModel 和 xaml 中的SelectedIndex沒有變化。

后面的代碼:

 public MainPage()
    {
        InitializeComponent();

        this.BindingContext = new ViewModel() ;
        picker.SelectedIndex = 1;
    }

截屏:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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