Mainpage.xaml - OnNavigateTo - PullRequest
       3

Mainpage.xaml - OnNavigateTo

0 голосов
/ 18 декабря 2011

Я разрабатываю приложение Silverlight с ViewModels.

В моем файле MainPage.xaml определено меню, основанное на уровне доступа, который я хочу свернуть или сделать видимым для определенных пунктов меню.

Так как OnNavigateTo недоступен на моем MainPage.xaml.cs, мне было интересно, как это сделать.

Меню следует менять каждый раз, когда пользователь входит / выходит

1 Ответ

1 голос
/ 18 декабря 2011

Когда вы создаете MenuItem для своего меню, привязывайте Visibility к свойству в вашей ViewModel ...

        <StackPanel>
            <toolkit:MenuItem Header="Do Something" Visibility="{Binding CanDoSomething}" />
        </StackPanel>

Свойство в вашей ViewModel может быть объявлено таким образом ...

public Visibility CanDoSomething { get; set; }

И вы бы переключили его с помощью метода в вашей ViewModel, как это ...

private void SetMenuVisibility()
{
    if (UserIsLoggedIn)
    {
        CanDoSomething = Visibility.Visible;
    }
    else
    {
        CanDoSomething = Visibility.Collapsed;
    }
    OnPropertyChange("CanDoSomething");
}

Этот метод вызывается всякий раз, когда пользователь входит в систему или выходит из нее. Это приведет к свертыванию или расширению пунктов меню так, как вы указали. Каждый MenuItem должен быть привязан к свойству в ViewModel, а ViewModel должен наследоваться от INotifyPropertyChanged.

Во-вторых, если вы хотите использовать шаблон ICommand, вы должны привязать свойство Command элемента MenuItem к команде в вашей ViewModel ...

        <StackPanel>
            <toolkit:MenuItem Header="Do Something"  Command="{Binding DoSomethingCommand}" />
        </StackPanel>

ViewModel объявляет команду, подобную этой ...

public ICommand DoSomethingCommand { get; set; }

И инициализировать это так ...

private void InitializeDoSomethingCommand()
{
    DoSomethingCommand = new RelayCommand
        (
            ExecuteDoSomething,
            param=>UserIsLoggedIn
        );
}

Я использовал здесь 'RelayCommand', но подойдет любой подобный класс.

Разница между этими двумя подходами заключается в том, что первый из них свернет MenuItem и сделает его невидимым для конечного пользователя. Второй просто отключит команду, но он все равно будет виден в «недоступном» состоянии.

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