Функция вызова Wpf представления ContentControl - PullRequest
0 голосов
/ 04 июня 2018

Я довольно новичок в C #, поэтому я только начинаю изучать основы.Прямо сейчас у меня есть ContentControl внутри окна, как это:

<ContentControl Content="{Binding}" x:Name="SubView"/>

И я настроил свои ресурсы Windows следующим образом:

<Window.Resources>
    <DataTemplate x:Name="StammdatenViewTemplate" DataType="{x:Type viewmodels:StammdatenViewModel}">
        <views:StammdatenView DataContext="{Binding}" />
    </DataTemplate>
    <DataTemplate x:Name="AdministrationViewTemplate" DataType="{x:Type viewmodels:AdministrationViewModel}">
        <views:AdministrationView DataContext="{Binding}" />
    </DataTemplate>
</Window.Resources>

В моем классе окна я устанавливаюDataContext вот так:

DataContext = new StammdatenViewModel();

Вот что я хотел бы сделать.Я хочу отключить все TextBoxes внутри ContentControl.Я думал о добавлении функции в мой класс StammdatenView.xaml.cs (который является классом моего подпредставления), а затем как-то запустил событие из окна.Хотя мне нужен доступ к функции внутри подпредставления.Это как-то возможно, и если да, то как?Или кто-нибудь посоветует другой подход?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы можете создать событие INotifyPropertyChanged в своей модели представления, а затем связать его с атрибутом 'IsEnabled = {Binding IsTextBoxEnabled}' в шаблоне представления для текстового поля.

public class ViewModel : BaseViewModel
{
    private bool _isTextBoxEnabled;
    public bool IsTextBoxEnabled
    {
        get { return _isTextBoxEnabled; }
        set
        {
            if (value != _isTextBoxEnabled)
                _isTextBoxEnabled = value;
            this.RaisePropertyChanged("IsTextBoxEnabled");
        }
    }
}

XAML

        <DataTemplate x:Key="template">
            <StackPanel Orientation="Horizontal" DataContext="{Binding}">
                <TextBox IsEnabled="{Binding IsTextBoxEnabled}" />
            </StackPanel>
        </DataTemplate>
0 голосов
/ 04 июня 2018

Или кто-нибудь может предложить другой подход?

Да.Вы должны связать свойство IsEnabled каждого TextBox в StammdatenView с логическим свойством StammdatenViewModel.Затем вы можете отключить TextBoxes, установив свойство источника в классе модели представления.Это один из ключевых аспектов шаблона проектирования MVVM, то есть то, что вы обрабатываете логику приложения в модели представления.

Убедитесь, что класс модели представления реализует интерфейс INotifyPropertyChanged и предоставляет уведомления об изменениях, как объяснено. MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...