这是我的 .xaml
<Picker x:Name="Title" SelectedItem="{Binding Title, Mode=TwoWay}" ItemsSource="{Binding Titles}" ItemDisplayBinding="{Binding Text}" Title="Title" />
<Entry x:Name="Name" Text="{Binding Name}" Placeholder="Name" />
Run Code Online (Sandbox Code Playgroud)
绑定到视图模型 .cs,如下所示
public class Person
{
public string Name { get; set; }
public string Title { get; set; }
List<SelectListItem> Titles = new(){
new SelectListItem { Text = "Mister", Value="Mr" }
new SelectListItem { Text = "Doctor", Value="Dr" }
...
}
}
Run Code Online (Sandbox Code Playgroud)
包含此数据
Person person = new() { Name = "Bill Jones", Title = "Mr" };
Run Code Online (Sandbox Code Playgroud)
所以选择器可以很好地显示列表。但我有两个问题。
Mr感觉就像我需要一处ItemValueBinding房产或类似的东西。(显然,这是我编造的)
我见过很多使用 INotifyPropertyChanged 的复杂代码,并在SelectedIndexChanged事件中做了一些巧妙的代码。但是,如果我的页面上有很多选择器,那么我就必须编写很多代码。
有没有一种我可能错过的更简单的方法来实现这两个要求?
如果你想设置选择器的默认值,你可以尝试这样:
Title.SelectedIndex = 0; // That means the picker chooses the first item. PickerIndex is 0-based
Run Code Online (Sandbox Code Playgroud)
在您的 ViewModel 中,更改 Title 属性
public string Title {get; set;}
Run Code Online (Sandbox Code Playgroud)
对此:
public SelectListItem Title {get; set;} // This will get selectedItem instead of just a Text
Run Code Online (Sandbox Code Playgroud)
您可以使用 BindingContext 将 Entry 与 Picker 绑定。这里我给大家举个例子:
<Picker x:Name="Title" SelectedItem="{Binding Title, Mode=TwoWay}" ItemsSource="{Binding Titles}" ItemDisplayBinding="{Binding Text}" Title="Title"/>
<Entry x:Name="Name" BindingContext="{x:Reference Title}" Text="{Binding SelectedItem.Text}" Placeholder="Name"/>
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,需要 x:Reference 标记扩展来引用源对象,即名为“Title”的 Picker。当选择器值更改时,它也会更改条目的文本。
| 归档时间: |
|
| 查看次数: |
5740 次 |
| 最近记录: |