Динамическое изменение содержимого кнопки в WPF на имя выбранного файла - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь динамически изменить имя содержимого кнопки в c# WPF, когда файл выбран после нажатия кнопки. Я использую MVVM в этом методе. Я попытался вставить событие click, но в этом методе это не сработает, потому что событие click всегда будет происходить раньше, чем событие команды. Я исследовал в StackExchange решения, но то, что я видел, - это, как правило, триггерные события и создание команды, которая вызывает несколько команд. Я мог бы использовать некоторые указатели на методологию, которая лучше всего подходит для изменения имени содержимого кнопки.

У меня есть следующая иерархия в MVVM (модификации все еще должны следовать этой иерархии)

В моем XAML я создал кнопку с Content="Import File" Я хотел бы динамически изменить это при выборе файла. Я использовал здесь командный метод и метод делегата в своем методе view для вызова моих методов.

<Button  x:Name="SelectFile" Margin="0 0 0 0" Content="Import File"  Command="{Binding ImportExcelBtn, Mode=TwoWay}"/>

В модели представления я использую метод команды делегата как таковой. Я получил имя файла как string FileName, но не могу найти способ связать метод и изменить имя содержимого кнопки.

public DelegateCommand ImportExcelBtn
    {
        get { return _importExcelBtn; }
        set
        {
            _importExcelBtn = value;
            SetPropertyChanged("ImportExcelBtn");
        }
    }

public ViewModel()
    {
        modelView = new ModelView();
        ImportExcelBtn = new DelegateCommand(ImportExcelFileAction);//From model
    }
private void ImportExcelFileAction()
        {
            excelFile = ImportFile();//get excel file from method
            string name = excelFile .ToString();
            int position = name.LastIndexOf("\\") + 1;
            string FileName = name.Substring(position, name.Length - position);
        }

В моей модели у меня есть метод выбрать файл. (Мой сценарий успешно выполняется здесь)

Большое спасибо!

1 Ответ

1 голос
/ 14 января 2020

Вы можете привязать Content к свойству во ViewModel и изменить его, когда получите имя файла. Например, в вашей ViewModel

public string ContentValue {get;set;} = "Import File";

И в Xaml

Content="{Binding ContentValue}" 

Позже, когда у вас есть имя файла, вы можете обновить ContentValue

private void ImportExcelFileAction()
{
excelFile = ImportFile();//get excel file from method
string name = excelFile .ToString();
int position = name.LastIndexOf("\\") + 1;
string FileName = name.Substring(position, name.Length - position);
ContentValue  = FileName;
OnPropertyChanged(nameof(ContentValue)); //Call Notify Property Changed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...