【发布时间】:2010-01-17 20:19:21
【问题描述】:
在 WPF 中,我有一个 bool 集合?值,我想以编程方式将它们中的每一个绑定到一个单独的复选框。我希望绑定是双向的,以便在代码中更改集合中单个项目的值会更新复选框,反之亦然。
我花了很长时间试图弄清楚如何做到这一点,但我完全陷入了困境。使用以下代码,复选框仅在加载窗口时才获得正确的值,仅此而已。更改复选框甚至不会更新集合中的值。 (更新:这似乎是 .NET4 中的错误,因为该集合确实在相同的 .NET3.5 项目中更新。更新:Microsoft 已确认该错误并将在 .NET4 版本中修复。)
非常感谢您的帮助!
C#:
namespace MyNamespace
{
public partial class MyWindow : Window, INotifyPropertyChanged
{
public MyWindow()
{
InitializeComponent();
DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public List<bool?> myCollection = new List<bool?>
{ true, false, true, false, true, false };
public List<bool?> MyCollection
{
get { return myCollection; }
set { myCollection = value; }
}
}
}
XAML:
<CheckBox IsChecked="{Binding Path=MyCollection[0], Mode=TwoWay}">
【问题讨论】:
-
我仍在处理前 3 个答案,但我对为什么我的代码似乎对前两个受访者有效(至少在 CheckBox -> MyCollection 方向上)感到困惑。对我来说,这根本就没有发生。我正在使用 VS2010 Beta 2 和 .NET4,以防万一。
-
好吧,我当然认为这无关紧要:我将所有内容都复制到了一个 .NET 3.5 项目中,嘿,很快——CheckBox 更新了 MyCollection 中的值。我想知道为什么它在 .NET 4 中不起作用?
-
嗯,如果你有这样的代码在 .NET 3.5 中工作,但相同的代码在 .NET 4 中不工作,这表明在 .NET 4 中存在错误。可能值得发布到 Connect .
标签: c# .net wpf data-binding two-way-binding