Свойство привязки из viewModel - PullRequest
       13

Свойство привязки из viewModel

0 голосов
/ 20 сентября 2018

Доброе утро, у меня проблема со страницей в C # на клиентском сервере.У меня есть страница, разделенная на 2 части: слева есть список объектов, а справа есть таблица, которая показывает детали выбранного объекта.Среди полей, показанных справа, есть ссылка на один или несколько файлов (связанных с объектом), которые пользователь может загрузить.Исходя из некоторых условий, я хочу запретить некоторым пользователям загружать эти файлы и разрешать им видеть только имена файлов.

В xaml я создал DataGrid, чтобы показать детали объектов, определенных следующим образом:

<DataGrid AutoGenerateColumns="False" Name="dgRPD" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" ItemsSource="{Binding ListRPD}" SelectedItem="{Binding SelectedRPD}" Height="Auto"> 

Код для столбца следующий:

<DataGridTemplateColumn Header="Files" Width="Auto" >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <cc:FilePickerOnlyName CanChooseFile="False" FileName="{Binding Path=FileNameDoc}" FilePath="{Binding Path=PathDoc, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding hide, UpdateSourceTrigger=PropertyChanged}" DataContext="{Binding}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Моя идея заключалась в том, чтобы использовать свойство IsEnabled для достижения моей цели, и если для него установлено значение False, я получаю его.Поэтому я создал свойство «скрыть», определенное следующим образом:

private bool _hide;
public bool hide
{
    get { return _hide; }
    set
    {
        if (_hide != value)
        {
            _hide = value;
            RaisePropertyChanged("hide");
        }
    }
}

Чтобы попробовать этот подход, я установил скрыть как ложное при инициализации ViewModel и каждый раз, когда я изменяю выбранный объект слевасторона страницы и вручную принудительно вызвать RaisePropertyChange для скрытия.У меня нет проблем с получением списка объектов или сведений об объектах, только когда я пытаюсь отключить поля.Я гуглил и искал любые вариации на пути привязки isEnabled, но ничего не получалось.Как я могу решить это?

1 Ответ

0 голосов
/ 20 сентября 2018

С помощью коллеги я исправил проблему;Я изменил IsEnabled следующим образом:

IsEnabled="{Binding ElementName=root, Path=ViewModel.hide}" 

и в теге UserControl в начале XAML я добавил следующие строки:

xmlns:local="clr-namespace:[namespace of the ViewModel]"
x:Name="root"

и теперь он работает.Отвечая на комментарии @Blacktempel и @Juan Carlos Rodriguez, свойство hide было объявлено в качестве публичного объекта bool в ViewModel, но не имело прямого отношения к объектам левых столбцов или деталям объектов в правой части страницы, потому что вв обоих случаях они являются частью очень большого и сложного внешнего класса, исходный код которого я не могу получить доступ или изменить.Я также хотел минимизировать изменения, необходимые для работы программы.

...