【问题标题】:How to set bydefault value of Picker in Xamarin form(MVVM)?如何以 Xamarin 形式(MVVM)设置 Picker 的默认值?
【发布时间】:2020-12-28 16:09:56
【问题描述】:

这是我在其中使用选择器的 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"},
};

【问题讨论】:

    标签: c# android asp.net mvvm xamarin.forms


    【解决方案1】:

    您必须使用源列表中的现有元素初始化绑定(在您的情况下为 AttendanceDate)。

    例子:

    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; }
    }
    

    【讨论】:

    • “源列表中的现有元素”终于我能够理解为什么我的选择器没有显示所选项目!
    【解决方案2】:

    您可以设置SelectedItemSelectedIndex 以使用选择器默认值。

    解决方案 1:

    在您的 ViewModel 中添加 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;
        }
    

    截图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 2018-12-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多