[英]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; }
}
您可以設置SelectedItem
或SelectedIndex
以使用選擇器默認值。
解決方案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.