[英]WPF binding xaml UI property to dynamic instance control property
我有一个自定义媒体播放器对象,该对象是在用户控件后面的代码中创建的。 任何时候都可以有1到4个,但是我想将音量和静音属性的其中之一绑定到xaml控件EG。
该控件是:
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>
我以为也许在后面的代码中创建绑定可能是解决的办法,但是我似乎找不到一个简单的示例来解释执行此操作的代码背后的代码以适合我的情况。
您可以创建一个帮助器类来保存当前活动的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;
好吧,我终于得到它的工作。 完全在代码后面应用了绑定。 我能够将我想要的属性绑定到按钮的ischecked属性,以切换mediaplayer对象的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);
所以这对我来说很好用,我使用相同的原理来绑定其他属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.