我在页面上有一个输入字段和一个选择器元素。在应用程序启动时,用户必须在选择器中选择一个进程,之后焦点应自动位于输入字段中。由于我在ViewModel中对Picker元素进行了评估(通过RelayCommand),因此我有一个问题,如果是这样,我是否以及如何从VM设置焦点。
我的xaml文件:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Mahle_ScannerApp_V3.MainPage"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:viewmodel="clr-namespace:Mahle_ScannerApp_V3.ViewModels"
x:DataType="viewmodel:MainViewModel">
<VerticalStackLayout>
<Image Source="logfox_logo_small.png"
WidthRequest="200"
Margin="0,10,0,0"/>
<Picker Title="Vorgang auswählen"
WidthRequest="270"
HorizontalTextAlignment="Center"
Margin="0,10,0,0"
FontSize="20"
TextColor="OrangeRed"
x:Name="piProcess"
ItemsSource="{Binding ScanProcesses}">
<Picker.Behaviors>
<toolkit:EventToCommandBehavior
EventName="SelectedIndexChanged"
Command="{Binding PiProcessItemChangedCommand}"
CommandParameter="{Binding Source={x:Reference piProcess},
Path=SelectedIndex}"/>
</Picker.Behaviors>
</Picker>
<Label x:Name="lblBarcodeOne"
Text="{Binding LblBarcodeText}"
FontSize="22"
Margin="0,20,0,0"
HorizontalTextAlignment="Center"/>
<Border Stroke="#000000"
Margin="0,10,0,0"
StrokeThickness="2"
StrokeShape="RoundRectangle 20,20,20,20"
Background="#C1CDC1"
Padding="8,8,8,8"
HorizontalOptions="Center">
<Entry
x:Name="entryBarcode"
Text="{Binding EntryBarcodeText}"
WidthRequest="270"
FontSize="20"
TextColor="#838b83"
HorizontalOptions="Center">
<Entry.Behaviors>
<toolkit:EventToCommandBehavior
EventName="TextChanged"
Command="{Binding TextEntryChangedCommand}"
CommandParameter="{Binding Source={x:Reference entryBarcode},
Path=Text}"/>
</Entry.Behaviors>
</Entry>
</Border>
</VerticalStackLayout>
</ContentPage>
我的视图模型(代码段)
...
[RelayCommand]
async Task PiProcessItemChanged(object data) {
ProcessType = Convert.ToInt32(data);
if(ProcessType.Equals(0)) {
LblBarcodeText = labelText[1];
} else {
LblBarcodeText = labelText[2];
}
}
itemchanged事件起作用。但是现在必须在输入字段中设置一个焦点,我在MVVM领域还是个新手,因此我不知道如何实现它。
1条答案
按热度按时间smdnsysy1#
这个逻辑是UI的一部分,可以放在后面的代码中。
这里有一个例子,你可以订阅更改文本事件并处理它。如果保存BindingContext的引用,则仍然可以使用ViewModel属性。
希望能有所帮助