我想知道我错过了什么?文本框中根本没有显示绑定。这些是我的代码:
XAML命名空间:
xmlns:c="clr-namespace:mySystem.Workspace"
DataContext和Resources:
<Grid.Resources>
<c:Parameter x:Key="mySource"/>
</Grid.Resources>
<Canvas>
<Canvas.DataContext>
<Binding Source="{StaticResource mySource}" />
</Canvas.DataContext>
文本框:
<TextBox x:Name="TextBox" Width="159" Height="26" Canvas.Left="36" Canvas.Top="47">
<TextBox.Text>
<Binding Path="JobKey" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
</TextBox.Text>
班级:
namespace mySystem.Workspace
{
public class Parameter : Object
{
访问者:
public BasePar JobKey
{
get { return jobKey; }
set { jobKey = value; }
}
答案 0 :(得分:4)
这里有很多奇怪的东西,但最明显的一个让你工作的是绑定路径区分大小写。
将绑定更改为:
<Binding Path="JobKey" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
这应该可以使绑定工作。
我也不确定BasePar的类型是什么,或者是什么类型,但除非你有意识地做一些聪明的事情,否则就把它变成像字符串这样的标准类型。
您也可能不应该使用名称空间System.Workspace
,而是与您自己的项目相关的东西。
在你的回复之后,我唯一想到的就是BasePar对象的用途,就是在一个DataConmplate中使用,在ItemsControl上说。 DataTemplates的行为是,当他们不知道如何渲染Object时,他们将回退Object的.ToString()方法。
现在,在我的评论中,我说我不认为TextBox
可以有一个DataTemplate,我相信这是真的然而我确实找到了一个技巧{{3其中模板包含内容控件和文本块。代码如下:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:System.Workspace"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<c:Parameter x:Key="mySource"/>
<DataTemplate x:Key="MyDataTemplate">
<TextBlock Text="{Binding}"/>
</DataTemplate>
</Grid.Resources>
<Canvas>
<Canvas.DataContext>
<Binding Source="{StaticResource mySource}" />
</Canvas.DataContext>
<ContentControl
Content="{Binding Path=JobKey}"
ContentTemplate="{StaticResource MyDataTemplate}" />
</Canvas>
</Grid>
我现在没有时间让TextBox工作 - 甚至不知道是否有可能,因为我的前几次尝试。但是,这可能有助于您到达目的地。
但是仍然 - 如果我是我,我只是使用简单的绑定到标准对象。在这种情况下,我无法看到BasePar类的好处。
答案 1 :(得分:3)
BasePar
实现是什么样的?在Debug Output窗口中查看是否有这样的行:
System.Windows.Data Error: 1 : Cannot create default converter to perform 'two-way' conversions between types 'WpfApplication1.BasePar' and 'System.String'. Consider using Converter property of Binding. BindingExpression:Path=JobKey; DataItem='Parameter' (HashCode=14209755); target element is 'TextBox' (Name='TextBox'); target property is 'Text' (type 'String')
这告诉您正在尝试绑定到该属性,但WPF无法创建双向绑定,因为它无法将文本(您键入TextBox)转换为“BasePar”对象。
根据David的建议,您可以绑定到原始字符串类型,或者可以(根据上面的警告消息),您可以向绑定添加Converter
以将字符串转换为BasePar
答案 2 :(得分:1)
你需要通过从DependencyObject派生出来来使jobkey成为DependencyProperty,或者从INotifyPropertyChanged派生你的类并添加所有的通知代码等。
如果您不这样做,那么您将不会收到更新通知,并且您的绑定将无法按预期工作。
答案 3 :(得分:1)
路径= “jobKey”
您需要绑定到属性而不是字段,即使用大写字母。另外:要调试绑定,请检查Visiual Studio中的输出窗口。