I’m a developing an App for a Touch Panel.
I have encountered a problem with passing GotFocus data to my ViewModel. My button needs to know which text box is currently selected – it will change a given string in ViewModel based on the focus. I’m using the Community MVVM Toolkit.
Here is my User Control:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:TouchPanel.ViewModels"
xmlns:views="clr-namespace:TouchPanel.Views"
mc:Ignorable="d" d:DesignWidth="1024" d:DesignHeight="600"
x:Class="TouchPanel.Views.PickUpParcelView"
x:DataType="vm:PickUpParcelViewModel">
<Design.DataContext>
<vm:PickUpParcelViewModel/>
</Design.DataContext>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="512" />
<ColumnDefinition Width="512" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center" Spacing="10" Margin="50">
<TextBlock> Enter your phone number</TextBlock>
<TextBox
Name="TextBoxPhoneNumber"
Watermark="Ex. +00 123 456 789"
Text="{Binding PhoneNumber}">
</TextBox>
<TextBlock> Enter your pick up code</TextBlock>
<TextBox
Name="TextBoxPickUpCode"
Watermark="Ex. 42069"
Text="{Binding PickUpCode}"
GotFocus="TextBox_GotFocus"
LostFocus="TextBox_LostFocus">
</TextBox>
</StackPanel>
<StackPanel
Grid.Column="1"
Background="CadetBlue">
<Button
Command="{Binding AddLetterA}">
Add Letter A
</Button>
</StackPanel>
</Grid>
</UserControl>
The UserControl.axaml.cs
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using System;
using System.Diagnostics;
using TouchPanel.ViewModels;
namespace TouchPanel.Views;
public partial class PickUpParcelView : UserControl
{
bool gotFocus = false;
public TextBox selectedTextBox; // i want to pass this to my viewmodel to modify
public PickUpParcelView()
{
InitializeComponent();
}
public void TextBox_GotFocus(object source, GotFocusEventArgs args)
{
Debug.WriteLine("Got Focus");
selectedTextBox = (TextBox)source;
gotFocus = true;
}
public void TextBox_LostFocus(object source, RoutedEventArgs args)
{
Debug.WriteLine("LostFocus");
gotFocus = false;
}
}
The ViewModel
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TouchPanel.ViewModels
{
public partial class PickUpParcelViewModel : ViewModelBase
{
[ObservableProperty]
public string? _pickUpCode = string.Empty;
[ObservableProperty]
public string? _phoneNumber = string.Empty;
[RelayCommand]
public void AddLetterA()
{
PickUpCode += "A";
}
}
}
I tried looking it up for hour but to no avail, I could not find a suitable solution to my problem.
The tutorials and samples don’t seem to have a good solution either.