2015-01-04 2 views
0

Я использую MVVM Light WPF 4.Как изменить видимость с помощью привязки в WPF

У меня есть ContentPresenter в моем Home.xaml.

<ContentPresenter Name="MDI" Content="{Binding WindowName, Mode=OneWay}"> 

Я связывание пользовательского элемента управления для этого в ViewModel как

public UserControl WindowName { get; set; } 
    void ShowSalesEntry() 
    { 
     WindowName = null; 
     WindowName = new SalesEntry(); 
     RaisePropertyChanged("WindowName"); 
    } 

с помощью команды в меню нажми и является обязательным штрафом.

Теперь в пользовательском элементе управления у меня есть кнопка, которая я использовал, чтобы закрыть (но закрыть я изменить видимость в сложенном состоянии) этим способом ..

Visibility="{Binding visibility, Mode=OneWay}" 

в модели представления пользовательского элемента управления,

public SalesEntryViewModel() 
    { 
     visibility = Visibility.Visible;    
     cmdExitWindow = new RelayCommand(ExitWindow); 
     RaisePropertyChanged("visibility"); 
    } 

и следующие, чтобы закрыть (видимость) разрушилась

public RelayCommand cmdExitWindow { get; set; } 

    void ExitWindow() 
    { 
     visibility = Visibility.Hidden; 
     RaisePropertyChanged("visibility"); 
    } 

Для выхода (означает, что видимость свернута). Это прекрасно работает.

Проблема в том, когда я нажимаю на ту же страницу, я имею в виду показать тот же пользовательский элемент управления, , теперь на этот раз видимость все еще рухнула. Хотя я изменился на видимый в событии загрузки .

Как решить эту проблему .. Я новичок в MVVM WPF .. Пожалуйста, помогите мне ..

ответ

1

Проблема заключается в том, когда я нажимаю на той же странице я имею в виду, чтобы показать тот же контроль пользователя , теперь это время видимости все еще рухнуло. Несмотря на то, что i изменено на видимое в событии загрузки.

Основываясь на этом комментарии и предоставленном коде, вы либо пропустили код, либо путали цель конструктора.

В вашем конструкторе вы установили Видимость на Visible. Затем у вас есть метод, который устанавливает видимость в Hidden, но нет ничего, чтобы вернуть его обратно в Visible после того, как это произошло. Конструктор запускается только при создании объекта. Вам нужно что-то, чтобы установить Видимость в соответствующее время (т. Е. Ваш комментарий «, когда я нажму на той же странице»).

//Add these lines to the method/event that will show the control again 
visibility = Visibility.Visible; 
RaisePropertyChanged("visibility"); 

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

+0

Привет, спасибо за ответ ур. Но когда я снова нажимаю меню, и я инициализирую объект правильно ' WindowName = null; WindowName = new SalesEntry(); RaisePropertyChanged («WindowName»); 'Этот путь .. Я не прав? – shanmugharaj

+1

Вы действительно создаете новый экземпляр SalesEntryViewModel где-нибудь? похоже, что вы делаете покупку в новом окне, используете тот же viewModel, не устанавливая видимость на видимые. –

+0

Спасибо за указание, что из Шаня, и хорошая точка Т.Если они вычеркивают одну и ту же модель представления (например, экземпляр модели представления объявлен в app.xaml или другом общедоступном словаре ресурсов), то вы, безусловно, получите этот результат независимо от создания нового объекта. – learningcs

Смежные вопросы