Как я могу отключить комбинированный список до нажатия кнопки в WPF MVVM - PullRequest
0 голосов
/ 23 марта 2020

В моем проекте у меня есть «Генерация отчетов» Button и «Выбор местоположения» ComboBox. Я хочу, чтобы пользователь не мог выбрать местоположение до нажатия кнопки «Создать отчет» Button. xaml, содержащий выпадающий список и кнопку:

<Button Content="Generate Reports" Command="{Binding GenerateReportsCommand}" Height="36" Margin="4" />
<ComboBox Grid.Column="2"   ItemsSource="{Binding Locations}" SelectedItem="{Binding SelectedLocation}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding LocationFilterCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>

Что я могу сделать в ViewModel или пользовательском интерфейсе? Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

У вас должно быть дополнительное свойство внутри ViewModel.

private bool _areReportsGenerated = false;
public bool AreReportsGenerated
{
    get => _areReportsGenerated;
    set
    {
        _areReportsGenerated = value;
        OnPropertyChanged(); // you method's implementation of INotifyPropertyChanged
    }

}

Если у вас нет реализации INotifyPropertyChanged, вы можете взглянуть на Microsoft one .

Внутри GenerateReportsCommand вы должны установить AreReportsGenerated на true.

В xaml тогда вам нужно только связать только что созданное свойство с IsEnabled свойством ComboBox

<ComboBox Grid.Column="2"   ItemsSource="{Binding Locations}" SelectedItem="{Binding SelectedLocation}" IsEnabled="{Binding AreReportsGenerated}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding LocationFilterCommand}" />
         </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>

Это должно сработать.

Надеюсь, я помог.

0 голосов
/ 23 марта 2020

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

Создайте новый Boolean в вашей ViewModel и привяжите к нему ComboBox IsEnabled. (Что-то вроде IsEnabled="{Binding YOURBOOLEAN}")

Обновите это Boolean из вашего GenerateReportsCommand после того, как пользователь успешно сгенерировал отчет. Если вы установите для этой переменной значение true, ComboBox IsEnabled также будет установлено в значение true.

...