[英]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.