Стиль привязки кнопок к свойству ViewModel в WP7 - PullRequest
0 голосов
/ 19 августа 2011

У меня есть кнопка воспроизведения в представлении AudioRecord.

В настоящее время он объявлен как:

<Button Width="72" Height="72" Style="{StaticResource RoundPlay}" 
                DataContext="{Binding ElementName=this, Path=DataContext}"
                cmd:ButtonBaseExtensions.Command="{Binding PlayStopCommand}"
                />

Когда пользователь нажимает кнопку, выполняется PlayStopCommand в элементах ViewModel.Я хочу, чтобы у кнопки был установлен стиль 'RoundStop' всякий раз, когда воспроизводится звук.

Как связать стиль кнопок со свойством в моей модели представления (какой тип свойства следует использовать), чтобы внешний вид кнопки можно было контролировать из кода?

У меня есть RoundStopстиль определен, мне просто нужен способ применить его к кнопке из кода.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Вы должны определить состояние воспроизведения в вашей viewmodel (Playing / Stopped) и привязать Button.Style к этому свойству с помощью конвертера.В вашем конвертере верните другой стиль (взятый из App.Current.Resources) в зависимости от текущего состояния.

Редактировать:

Вот пример вашего конвертера долженвыглядит следующим образом:

public class StateStyleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (PlaybackState)value == PlaybackState.Playing ? App.Current.Resources["RoundPlay"] : App.Current.Resources["RoundStop"];
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

В этом примере PlaybackState является перечислением:

public enum PlaybackState
{
    Playing,
    Stopped
}

Затем вы должны добавить свойство состояния в модель представления (часть, в которой вы уведомляете об изменении, зависитна платформе, которую вы используете для MVVM):

private PlaybackState state;
public PlaybackState State
{
    get { return state; }
    set
    {
        state = value;
        RaiseNotifyPropertyChanged("State");
    }
}

Объявите свой конвертер в XAML:

<UserControl.Resources>
    <converters:StateStyleConverter x:Key="StateStyleConverter"/>
</UserControl.Resources>

И, наконец, привяжите его к кнопке:

<Button Width="72" Height="72" Style="{Binding State, Converter={StaticResource StateStyleConverter}}" 
            DataContext="{Binding ElementName=this, Path=DataContext}"
            cmd:ButtonBaseExtensions.Command="{Binding PlayStopCommand}"
            />
0 голосов
/ 19 августа 2011

Вы можете использовать ToggleButton и внести необходимые визуальные изменения в визуальные состояния для отмеченных / не отмеченных.

Если вы должны сделать то, что указано в вашем вопросе, тогда выможете определить стиль в ресурсах, а затем получить к нему доступ в коде от this.Resources["YourStyleKey"]; Ваша проблема будет заключаться в том, чтобы получить его из представления в модель представления, поэтому мое первое предложение:)

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