【发布时间】:2014-08-07 06:13:11
【问题描述】:
我是 wpf 的初学者。我正在按照教科书学习,示例已显示,但在我编写动态绑定部分时,即使在严格遵循其每个说明三次后,它也无法正常工作。 这是后面的代码
using System;
using System.ComponentModel;
namespace KarliCards_GUI
{
[Serializable]
public class GameOptions:INotifyPropertyChanged
{
private bool _playAgainstComputer = false;
public bool PlayAgainstComputer
{
get
{
return _playAgainstComputer;
}
set
{
_playAgainstComputer = value;
OnPropertyChanged("PlayAgainstComputer");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在 XAML 文件中,我想通过使用具有 GameOptions 实例的 DataContext 动态绑定复选框的 IsChecked 属性。 以下部分代码在 XAML 文件中
<CheckBox Content="Play against computer" HorizontalAlignment="Left" Margin="11,33,0,0" VerticalAlignment="Top" Name="playAgainstComputerCheck" IsChecked="{Binding Path=PlayAgainstComputer}" />
下面是那个 XAML 的 csharp 文件的代码
namespace KarliCards_GUI
{
public partial class Options : Window
{
private GameOptions _gameOptions;
public Options()
{
if (_gameOptions == null)
{
if (File.Exists("GameOptions.xml"))
{
using (var stream = File.OpenRead("GameOptions.xml"))
{
var serializer = new XmlSerializer(typeof(GameOptions));
_gameOptions = serializer.Deserialize(stream) as GameOptions;
}
}
else
_gameOptions = new GameOptions();
}
DataContext = _gameOptions;
InitializeComponent();
}
}
}
我面临的问题是,在属性“PlayAgainstComputer”中,如果我将变量(_playAgainstComputer)设置为“值”,它总是在复选框中选中。
【问题讨论】:
-
可能是这种情况,因为在设置
DataContext之后调用了InitializeComponent()方法。CheckBox的IsChecked属性的默认值为true。我建议先调用InitializeComponent()方法,然后设置DataContext -
提示:我们使用 nameof(PlayAgainstComputer) 而不是 OnPropertyChanged("PlayAgainstComputer"); 中的 "PlayAgainstComputer",如果你曾经重命名这个,字符串将不会被重命名。