Member 14654140 Ответов: 2

Как привязать значение локальной переменной(string) к текстовому полю в проекте WPF MVVM


Я просматриваю файл с помощью openfiledialog и должен получить путь в текстовом поле, поэтому после написания кода, например

приватный просмотр пустоты()
{
Диалоговое окно openfiledialog ОФД = новое диалоговое окно openfiledialog();
ОФД.DefaultExt = "*.";
ОФД.Фильтр = "текстовые файлы (*.в формате txt)|*.txt|все файлы (*.*)|*.";

if (ofd.ShowDialog() == true)
{
строке filename = ОФД.имя файла;
}
}
у меня есть путь в "string filename", который я хочу связать с текстовым полем, пожалуйста, любой может помочь мне получить привязку с текстовым полем

Что я уже пробовал:

я не получаю, чтобы получить значение переменной в свойство, так что я могу привязать непосредственно к текстовому полю или если какое-либо решение есть, пожалуйста, помогите.

2 Ответов

Рейтинг:
2

Richard Deeming

Чтобы MVVM работал, вам нужно использовать свойство. Сеттеру недвижимости необходимо поднять PropertyChanged событие.

Предполагая, что у вас есть разумный базовый класс:

private string _fileName;

public string FileName
{
    get { return _fileName; }
    set { SetProperty(ref _fileName, value); }
}

private void Browse()
{
    using (OpenFileDialog ofd = new OpenFileDialog())
    {
        ofd.DefaultExt = ".txt";
        ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.";
        
        if (ofd.ShowDialog() == true)
        {
            FileName = ofd.FileName;
        }
    }
}
Свяжите ваши TextBox к FileName свойство на вашем представлении-модель.

Пример базового класса:
public abstract class ViewModelBase : INotifyPropertyChanged
{
    private static readonly ConcurrentDictionary<string, PropertyChangedEventArgs> EventArgsCache = new ConcurrentDictionary<string, PropertyChangedEventArgs>();
    
    public event PropertyChangedEventHandler PropertyChanged;
    
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler is null) return;
        
        PropertyChangedEventArgs e = EventArgsCache.GetOrAdd(propertyName, n => new PropertyChangedEventArgs(n));
        handler(this, e);
    }
    
    protected void SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
    {
        if (Equals(storage, value)) return;
        
        storage = value;
        OnPropertyChanged(propertyName);
    }
}


Member 14654140

Да, дорогая, это работает, спасибо тебе большое...!

Рейтинг:
1

OriginalGriff

Попробуй:

MyTextBox.Text = filename;