我有一个标签和两个条目。我想让标签显示所选条目。现在选择第二个条目不会更改标签。罪魁祸首是什么?
这是我的代码。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vm="clr-namespace:MyProject"
x:Class="MyProject.TestPage"
x:DataType="vm:TestViewModel"
Title="TestPage">
<VerticalStackLayout>
<Entry x:Name="Entry1" Text="Entry 1">
<Entry.GestureRecognizers>
<TapGestureRecognizer Command="{Binding SetSelectedEntryCommand}"
CommandParameter="{Reference Entry1}" />
</Entry.GestureRecognizers>
</Entry>
<Entry x:Name="Entry2"
Text="Entry 2">
<Entry.GestureRecognizers>
<TapGestureRecognizer Command="{Binding SetSelectedEntryCommand}"
CommandParameter="{Reference Entry2}" />
</Entry.GestureRecognizers>
</Entry>
<Label Text="{Binding SelectedEntry.Text}" />
</VerticalStackLayout>
</ContentPage>
public partial class TestPage : ContentPage
{
public TestPage(TestViewModel model)
{
InitializeComponent();
BindingContext = model;
model.InitializeCommand.Execute(Entry1);
}
}
这很烦人:看起来你的帖子大部分都是代码;请添加更多详细信息。
public partial class TestViewModel : ObservableObject
{
[ObservableProperty]
Entry _selectedEntry;
[RelayCommand]
void Initialize(Entry selectedEntry)
{
SelectedEntry = selectedEntry;
SelectedEntry.BackgroundColor = Colors.Pink;
}
[RelayCommand]
void SetSelectedEntry(Entry selectedEntry)
{
SelectedEntry.BackgroundColor = Colors.White;
SelectedEntry = selectedEntry;
SelectedEntry.BackgroundColor = Colors.Pink;
}
}
编辑
显然它在 Android 上可以运行,但在 Windows 上却不行。因为我需要在 Windows 上使用触摸屏?
您应该使用带有 EventToCommandBehavior 的 Focused 事件
更多信息请查看:
https://learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/entry?view=net-maui-9.0
https://learn.microsoft.com/en-us/dotnet/communitytoolkit/maui/behaviors/event-to-command-behavior
这是我的解决方案。我更改了代码。-----更新-----
在这里我使用了EventToCommandBehavior,并且它成功了!
测试视图模型
测试页面
测试页面
@FreakyAli 的答案的一个变体,您可以绑定到 IsFocused 属性并在 DataTrigger 中使用它,如下所示。这将最大限度地减少视图模型需要做的工作量,因为您可以仅在视图中实现所有要求,例如
我确实有一个 CommunityToolkit MultiMathExpressionConverter 增强功能,它有一个简单的 XAML 解决方案,可以帮助您解决日益扩大的规模问题,例如针对 3 个输入字段:
以上内容基于能够将 Label.Text 表达式写为:
或者你可以做一些更常规的事情,例如
ConverterParameter='x1 ? x2 : x3 ? x4 : x0'
:通过投票来帮助我: