Индикатор текущей страницы MVVM - PullRequest
0 голосов
/ 20 декабря 2011

В моем приложении WPF я пытаюсь перейти на другие «страницы» с помощью ContentControl. У меня это работает до сих пор, в моей MainViewModel я инициировал другие view-модели, которые должны быть частью MainViewModel.

Я отображаю свои виды с табличкой данных, как это:

        <DataTemplate DataType="{x:Type vm:NewsViewModel}">
            <Views:NewsView />
        </DataTemplate>

Я получил ItemsControl с TextBlocks для отображения свойства View (models) PageName, когда я нажимаю на него, он устанавливает свойство CurrentView на соответствующую ViewModel, и он отображается. Так что это не проблема ... Однако проблема, с которой я сталкиваюсь сейчас, заключается в том, как позволить текстовому блоку отображать CurrentView, который у меня есть, например, я хочу, чтобы он был другого цвета, чем остальные текстовые блоки, чтобы пользователь мог видеть, какой вид (модель) активна.

Я пытался сделать это в стиле для текстового блока с помощью DataTrigger, но он принимает только постоянные значения, какие-либо идеи?

Ответы [ 2 ]

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

Почему бы не переключить ItemsControl на ListBox, поскольку он имеет встроенные функции выбора?Вы можете стилизовать его так, чтобы он скрывал выделение выделения и выглядел так же, как ваш ItemsControl, и основывал свой триггер на ListBoxItem.IsSelected.

Если вы не хотите этого делать, вы, вероятно, можете использовать IMultiValueConverter для передачи текущей ViewModel и активной ViewModel конвертеру, который будет возвращать True, если элементы являютсято же самое или ложь, если нет.

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

Создайте IValueConverter, который возвращается, если предоставленное представление является активным представлением, и добавьте его в привязку DataTrigger.

Пример преобразователя:

public class IsViewActiveConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == [activeView];
    }
}

Пример xaml:

<UserControl.Resources>
     <local:IsViewActiveConverter x:Key="IsViewActive"/>
</UserControl.Resources>

<DataTrigger Binding="{Binding View, Converter={StaticResource IsViewActive}}" Value="True"> 
...