WPF绑定帮助

时间:2009-08-07 15:19:45

标签: wpf data-binding binding

我没有那么多使用WPF所以解决这个问题可能非常简单。

在我正在开发的ide中,它将有多个控件(文本编辑器),每个控件都托管在一个选项卡中,就像VS对每个源文件一样。当用户单击new时,“host”创建一个新的EditorWindow(用户控件),创建一个新选项卡,并告诉选项卡显示它创建的EditorWindow,然后更新一个名为currentWindow(类型为EditorWindow)的属性。目前活跃。 EditorWindow内部是文本编辑器,其名称为textEditor(也是属性)。我要做的是从我正在使用的文本编辑器控件的快速启动源中获取此代码

                    <StackPanel>
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsIndicatorMarginVisible}" Content="Indicator margin visible" />
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsLineNumberMarginVisible}" Content="Line number margin visible" />
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsRulerMarginVisible}" Content="Ruler margin visible (useful for fixed-width fonts only)" />
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsSelectionMarginVisible}" Content="Selection margin visible" />
                    </StackPanel>

将它放在主机控件xaml中,并将复选框绑定到语法编辑器。我尝试过几个不同的东西但无济于事。 Control是托管所有选项卡的窗口的名称,而path显然应该是复选框绑定的属性。我很确定问题是在初始运行时currentWindow没有初始化,因此我的绑定不会得到更新,但我不知道如何解决这个问题。谢谢!

2 个答案:

答案 0 :(得分:1)

由于您不熟悉WPF,因此您可能不知道属性必须实现某种更改通知才能使绑定生效。例如,如果路径“currentWindow.textEditor.IsIndicatorMarginVisible”中的任何属性发生更改,则需要通知绑定引擎它已更改。如果您将这些属性实现为DependencyPropertys,则更改跟踪是免费的。否则,您应该实现INotifyPropertyChanged。

答案 1 :(得分:0)

我发现Snoop实用程序是进行快速绑定调试的最简单方法,你应该尝试使用它,看看它是否告诉你对绑定属性有用的东西。