将DataContext设置为XAML中的当前代码隐藏对象
我正在尝试将UserControl的DataContext设置为UserControl的代码隐藏类。 从代码隐藏方面来看,这很容易做到:
public partial class OHMDataPage : UserControl { public StringList Stuff { get; set; } public OHMDataPage () { InitializeComponent(); DataContext = this; } }
但是,我怎样才能完全从XAML端和UserControl级别执行此操作? 如果我这样做,它适用于子节点(并从代码隐藏中删除DataContext = this;
):
我真的很想了解如何在UserControl本身上执行此操作。 我希望这可行:
但事实并非如此。
DataContext="{Binding Mode=OneWay, RelativeSource={RelativeSource Self}}"
应该管用。
但是,如果在调用InitializeComponent()
之前未设置属性,则WPF绑定机制不知道属性的值已更改。
为了给你一个快速的想法:
// the binding should work public StringList Stuff { get; set; } public Constructor() { Stuff = new StringList { "blah", "blah", "foo", "bar" }; InitializeComponent(); } // the binding won't work public StringList Stuff { get; set; } public Constructor() { InitializeComponent(); Stuff = new StringList { "blah", "blah", "foo", "bar" }; }
如果您正在使用字符串列表,请考虑使用ObservableCollection
。 这将在添加或删除项目时通知WPF绑定机制。