Я действительно смущен кодом, но я думаю, что знаю, что вы пытаетесь сделать ..
На вашем MVVM CLASS вам нужно будет реализовать INotifyPropertyChanged. Чтобы сделать это, вам нужно добавить необходимые пространства имен, Eventhandler и «триггер». Для простоты я собираюсь начать ваш класс с нуля - вы можете вручную добавить эти части в существующий код, если вам нужно.
Часть 1 - Правильная настройка класса MVVM
Шаг 1: Добавьте необходимые с помощью операторов в начало страницы:
using System.ComponentModel;
using System.Runtime.CompilerServices;
Шаг 2: Добавьте INotifyPropertyChanged - вы получите немедленную «ошибку» - проигнорируйте ее, пока мы не закончили.
public class MVVM : INotifyPropertyChanged
{
}
Шаг 3: Добавить EventHandler (который исправляет ошибку из шага 2):
public class MVVM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
Шаг 4: Добавить триггер:
public class MVVM : INotifyPropertyChanged
{
private void OnPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
Со всем этим, вы уже готовы начать добавлять свои свойства. Я сделал несколько изменений в зависимости от того, что я предполагаю, что вы пытаетесь сделать. вам нужно будет обновить свою страницу / пользовательский интерфейс следующим ... Вот завершенный код, который включает комментарии о том, что я сделал:
public class MVVM : INotifyPropertyChanged
{
// Set to Private since we NEVER want MVVM binding to this property becuase it DOES NOT
// call the 'OnPropertyChanged' whenever the value is changed
private bool _isShowFrame= true;
public bool IsShowFrame
{
get => _isShowFrame;
set
{
// We check to see if the value has changed, if it hasn't we're done.
if (_isShowFrame == value) return;
// If the value HAS changed, we will save the new value here.
_isShowFrame = value;
// We will now let everyone know that the value has changed! This will update your UI!
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Вот свойство для Имя пользователя, которое будет обновляться в MVVM - вы увидите, как я использую ту же структуру, и при каждом изменении свойства вызываем OnPropertyChanged:
private string _userName;
public string UserName
{
get => _userName;
set
{
if (_userName == value) return;
_userName = value;
OnPropertyChanged();
}
}
ЧАСТЬ 2 - Исправление страницы / формы
Ваша страница / окно Состоит из двух частей - кода XAML и «кода позади», который написан на C# (в вашем случае). Code-Behind содержит все «события», такие как нажатие кнопки, и другие вещи, которые вы в нее встроили.
Вы не предоставили много кода, поэтому мы представим, что ваша страница XAML называется MainWindow - поэтому в Visual Studio она называется "Main Window.xaml". C# «код позади» называется «Main Window.xaml.cs»
XAML:
<Entry x:Name="entryName" TextChanged="entryName_TextChanged"/>
<Frame BackgroundColor="Gray" Margin="10" x:Name="FramesName" IsVisible="{Binding IsShowFrame}" />
MainWindow.xaml.cs - Опять же - Вы Я не предоставил большого количества кода, поэтому я не могу дать вам точный код. Помните - «MainWindow» - это готовая страница, с которой, я предполагаю, мы работаем. Замените 'MyProgram' в этом коде именем вашего приложения / пространства имен по умолчанию
public partial class MainWindow : UserControl
{
MyProgram.MVVM mvvm = new MyProgram.MVVM();
public MainWindow()
{
InitializeComponent();
DataContext = mvvm;
}
protected void entryName_TextChanged(object sender, TextChangedEventArgs e)
{
mvvm.IsShowFrame = false;
}
}
Этот ответ дает вам основы использования MVVM - вы узнали, как настроить свойство автоматически запускать обновления пользовательского интерфейса и устанавливать привязку (называемую DataContext). Если вы потратите время, чтобы понять, что происходит в этом ответе - он ДЕЙСТВИТЕЛЬНО поможет вам.
Как только вы это заработаете, я бы посоветовал просмотреть мой ответ на похожий вопрос: Привязка Viewmodel к представлению - это научит вас, как изменять элементы из внешних классов и страниц, используя MVVM. Это может даже помочь вам понять, что происходит в этом вопросе тоже.
Удачи!