我發現了很多關於如何將WPF複選框的IsChecked屬性綁定到布爾屬性(如果屬於相同的Window類。我想要做不同的事情:如何將WPF複選框的IsChecked屬性綁定到非窗口對象的布爾屬性
我有主窗口(節選):
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private readonly SoundFx _soundFx = new SoundFx();
private void _StartNewGame()
{
_soundFx.GameStarted();
}
}
然後我有SoundFx類(節選):
public class SoundFx : DependencyObject
{
public void GameStarted()
{
if (Enabled)
{
_PlayGameStartedSound();
}
}
public bool Enabled
{
get { return (bool) GetValue(EnabledProperty); }
set { SetValue(EnabledProperty, value); }
}
public static readonly DependencyProperty EnabledProperty =
DependencyProperty.Register("Enabled", typeof(bool),
typeof(SoundFx), new UIPropertyMetadata(false));
}
和我有XAML (摘錄):
<Grid>
<CheckBox IsChecked="{Binding ElementName=_soundFx, Path=Enabled}" x:Name="checkBoxSoundFx" Content="Sound FX" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom"/>
</Grid>
說實話,我是新來的WPF,並不確切知道我在做什麼。我試圖實現的是當用戶點擊checkBoxSoundFx
元素時,_soundFx.Enabled
的值將被更改,而不使用任何事件處理程序,如Checked
或Unchecked
。這應該可以與數據綁定,不是嗎?
非常感謝!你介意爲什麼解釋我的工作原理嗎?您的XAML對我來說是完全不可理解的。 –
@Kimmy在xaml中,我們找到窗口並綁定到這個窗口屬性,你可以閱讀關於RelativeSource的內容,當你的控件的DataContext與你的窗口不同並且你想綁定到窗口的屬性時,它非常有用 – Jamaxack
Oh man,was I一月份沒有經驗的回來!同時,我當然會決定使用MVVM模式來解決這個問題,而不是綁定到有時會發生在這裏的屬性,有時恰好在那裏。 –