WPF связывает свойство пользовательского интерфейса xaml со свойством элемента управления динамическим экземпляром - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть пользовательский объект медиаплеера, который я создаю в коде позади пользовательского элемента управления.Их может быть от 1 до 4 в любое время, но я хочу привязать громкость и свойство mute только одного к элементу управления xaml, например:

Элемент управления:

MediaControlplayer  vcMediaPlayerMaster = new MediaControlplayer();

В этом случае опция отключения звука в ischecked состоянии элемента управления не работает.Как я могу привязать привязку к свойствам элемента управления, когда он создается в коде позади?

xaml похож на это.Переменная vcMediaPlayerMaster является глобальной переменной в коде позади.Когда я его создал, я предположил, что его объявление в качестве глобальной предопределенной переменной позволит привязать к нему нижеприведенный xaml, но, похоже, это не так.

<ToggleButton x:Name="btnAudioToggle" ToolTip="Audio Mute/Unmute"  
Click="BtnAudioToggle_OnClick" IsChecked="{Binding Mode =TwoWay, 
ElementName=vcMediaPlayerMaster, Path=Mute}" BorderBrush="LightBlue" 
Width="32" Height="32" Margin="0,5,10,10" Background="{StaticResource 
IbAudio}" Style="{DynamicResource ToggleButtonStyle1}" > </ToggleButton>

Я подумал, что возможно создать привязку в кодеМожет быть, путь, но я не могу найти простой пример, который объясняет код процесса, чтобы сделать это, чтобы соответствовать моему случаю.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Хорошо, я наконец-то получил его на работу.Применено связывание в коде полностью.Мне удалось привязать свойство, которое я хотел, к свойству ischecked кнопки, чтобы переключить свойство bool объекта медиаплеера

 MediaControlplayer  vcMediaPlayerMaster = new MediaControlplayer();
 Binding myMuteBinding = new Binding("Mute");
 myMuteBinding.Source = vcMediaPlayerMaster;
 myMuteBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
 myMuteBinding.Mode = BindingMode.TwoWay;
 btnAudioToggle.SetBinding(SimpleButton.IsCheckedProperty, myMuteBinding);

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

0 голосов
/ 18 февраля 2019

Вы можете создать вспомогательный класс для хранения текущего активного MediaPlayer.
В качестве простого примера:

public class MediaPlayerHelper : INotifyPropertyChanged
{
    private MediaControlplayer currentPlayer;

    public static MediaPlayerHelper Instance { get; } = new MediaPlayerHelper();

    public MediaControlplayer CurrentPlayer 
    { 
        get => this.currentPlayer;
        set { /* Implement a setter with INotifyPropertyChanged */ }
    }

    // Implement INotifyPropertyChanged here
}

Привязка к этому будет выглядеть следующим образом

<Slider Value="{Binding Volume, Source={x:Static helper:MediaPlayerHelper.Instance}}"/>

Не забудьте включить пространство имен в открывающий тег вашего класса в XAML:

xmlns:helper="clr-namespace:SomeNamespace.Helper"

Теперь вам просто нужно изменить текущий используемый MediaPlayer всякий раз, когда он изменяется:

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