【发布时间】:2014-10-09 13:41:46
【问题描述】:
我正在尝试在 WPF 中创建自己的、非常简单的用户控件。它基本上只是一个组合框,里面有一些额外的逻辑。 我尝试使用本教程创建自己的 Depdency-Property:http://www.codeproject.com/Articles/140620/WPF-Tutorial-Dependency-Property
到目前为止,这一切正常,但如果属性发生变化,我也想在用户控件中的组合框上反映这一点。似乎我无法将子控件直接绑定到我的新 Dependency-Project。
我的代码现在是这样的:
public partial class ClassSelector : UserControl
{
public static readonly DependencyProperty CurrentValueProperty =
DependencyProperty.Register("CurrentValue", typeof(ClassType),
typeof(ClassSelector), new FrameworkPropertyMetadata());
public ClassType CurrentValue
{
get
{
return (ClassType)this.GetValue(CurrentValueProperty);
}
set
{
this.SetValue(CurrentValueProperty, value);
}
}
public ClassSelector()
{
this.DataContext = this;
InitializeComponent();
cmbClassType.ItemsSource = Enum.GetValues(typeof(ClassType));
}
}
设置依赖属性或组合框的值对我来说似乎很奇怪。 我试图通过以下方式在 xaml 中直接绑定它:
<Grid>
<ComboBox x:Name="cmbClassType" SelectedItem="{Binding Path=CurrentValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectionChanged="cmbClassType_SelectionChanged" />
</Grid>
我尝试将 Dependicy-Project changed Event 映射到组合框,反之亦然,但这会导致代码非常奇怪,因为组合框更改必须更改组合框的属性值和属性值。
我很确定必须有可能将 DependencyProperty 绑定到子控件,但我找不到实现此功能的方法。
提前感谢所有建议,祝大家周末愉快
马蒂亚斯
Edith说:调用Window需要将Object绑定到Grid,而不是Window,例如:
grdMain.DataContext = new DeckSearch();
同时工作正常
this.DataContext = new DeckSearch();
此行为仅适用于我的自定义控件,所有其他控件都可以与 Window 本身的 DataContext 完美配合。
【问题讨论】:
-
不要
this.DataContext = this。这是有罪、肮脏和错误的,如果你这样做,魔鬼会吃掉你的 Visual Studio。 -
如果我设置它,Combobox 将绑定到枚举的默认值。如果我删除它,它一直是空的,这更糟。
-
HighCore 的意思是你应该命名
Grid,例如使用x:Name="root",并在其上设置DataContext:root.DataContext = this。至于您的问题,我不明白,因为我可以从ComboBox中选择一个值,并且它已正确更新。您能否显示更多代码或重现方法? -
您好,感谢您的回复,我正在使用 DataContext,但不知道到底发生了什么。我想我将不得不阅读一些关于它的东西,但感谢您的输入。关于控件:您是否尝试在窗口上设置控件并绑定新的“CurrentValue”属性?它一直是空的,但我得到了 DependencyProperty-changed 事件
标签: c# wpf xaml combobox user-controls