Я гуглил в течение нескольких часов, но не нашел решения, которое смог понять (я очень плохо знаком с ООП и C # ...).
Задача под рукой такова:
- У меня есть класс "DutyDay", который имеет свойство "ActualShowTime", которое является объектом DateTime.
- TextBox с именем "textBoxLegalFDP".
- метод "CalculateLegalFDP"в котором «ActualShowTime» будет получен через серию вычислений на основе различных других переменных.
Теперь, когда свойство «ActualShowTime» в классе «DutyDay» было изменено, TextBox »textBoxLegalFDP "должен прослушать это изменение, принять обновленное значение" ActualShowTime ", отправить его через" CalculateLegalFDP "и затем поместить новый вычисленный результат в свойство" textBoxLegalFDP.Text ", которое будет показано в TextBox.
Это то, что я сделал до сих пор:
namespace DutyTimeRechner
{
public class DutyDay : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private DateTime _actualShowTime;
public DateTime ActualShowTime
{
get
{
return _actualShowTime;
}
set
{
if (!_actualShowTime.Equals(value))
{
_actualShowTime = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ActualShowTime"));
}
}
}
}
Я надеюсь, что пока это было правильно, согласно тому, что я нашел в Интернете.
Я не включил метод«CalculateLegalFDP ", поскольку здесь это не имеет особого значения.
Какой код мне нужно написать, чтобы TextBox прослушивал изменение свойства и передавал его" CalculateLegalFDP "и собственное обновлениеСвойство «Текст»?
Я думал о чем-то простом, например:
textBoxLegalFDP.AddHandler.OnPropertyChanged = PropertyChangedEventHandler(object sender, "ActualShowTime");
Но уже взглянув на него сам, я знаю его дерьмо, и Visual Studio был еще менее доволен этим подходом, но только чтобы вы знали, какое решение я имею в виду!
PS: Мое мышление действительно имеет смысл?Или есть лучший способ решить все это?
Редактировать: вот код XAML, после того, как я поместил в него DataContext (только соответствующие части):
<Window x:Class="DutyTimeRechner.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DutyTimeRechner"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Tour Details" Height="450" Width="1000" ResizeMode="NoResize">
<Window.Resources>
<local:DutyDay x:Key="DutyTimeRechner" />
</Window.Resources>
<StackPanel DataContext="{StaticResource DutyTimeRechner}" Orientation="Horizontal">
и:
<TextBox x:Name="textBoxActualFDP" Text="{Binding ActualShowTime, UpdateSourceTrigger=PropertyChanged}" Margin="2" Height="26" FontSize="16" TextAlignment="Center" MaxWidth="50" Width="43"/>
Но это не сработало, оно просто дает мне стандартное значение даты "01.01.0001 12:00:00 AM" в текстовом поле, что я делаю не так?