【发布时间】:2014-08-24 21:10:45
【问题描述】:
我的组合框有问题。我正在尝试在运行时设置选择,但绑定不起作用。
public ICLINKDesignatorCandidate SelectedDesignator
SelectedDesignator.Designator = somevalue;
...
<ComboBox Grid.Row="4" DisplayMemberPath="DisplayName"
SelectedValuePath="{Binding Path=DesignatorId}"
SelectedItem="{Binding Path=SelectedDesignator}"
ItemsSource="{Binding DesignatorList}" />
所以我收到绑定错误:
BindingExpression 路径错误:在“对象”“TCard4312VM”(HashCode=47413204)上找不到“DesignatorId”属性。 BindingExpression:Path=DesignatorId; DataItem='TCard4312VM' (HashCode=47413204);目标元素是 'ComboBox' (Name='');目标属性是“SelectedValuePath”(类型“字符串”)
那么为什么要查看父视图模型而不是 CLINKDesignatorCandidate 对象?
因此,SelectedValuePath 正在查看 DesignatorList 中元素上属性的父视图模型 INSTEAD。 奇怪的是,当我的 DesignatorList 是“DESIGNATOR”类型的列表(这是一个实体框架实体)时,它工作得非常好,并且没有绑定问题。
DisplayName 显然工作正常,所以我不知道为什么 DesignatorID 不能。这是课程:
public class CLINKDesignatorCandidate : ICLINKDesignatorCandidate
{
public CLINKDesignatorCandidate()
{
}
public int DesignatorID { get; set; }
public DESIGNATOR Designator
{
get;
set;
}
public string DisplayName
{
get;
set;
}
}
这是当我绑定到 DESIGNATOR(实体框架实体)类型列表时使用的代码:
<ComboBox Grid.Row="3" IsEditable="True"
DisplayMemberPath="DesignatorName"
SelectedValuePath="{Binding Id}"
SelectedItem="{Binding SelectedDesignator}"
ItemsSource="{Binding DesignatorList}" />
这工作得很好,我从来没有遇到任何绑定问题,它试图在父视图模型中查找“Id”。
我在后面的代码中设置视图模型如下:
public New4312(IEquipment4312VM vm)
: this()
{
InitializeComponent();
this.DataContext = vm;
}
我在组合框的资源字典中使用 DataTemplate:
<DataTemplate x:Key="resTCard4312MIP">
<Button Tag="{Binding}" >
<Grid DataContext="{Binding}">
<telerik:Tile Width="100" Background="Purple">
<ComboBox Grid.Row="4" IsEditable="True"
DisplayMemberPath="DisplayName"
SelectedValuePath="{Binding Path=DesignatorId}"
SelectedValue="{Binding Path=SelectedDesignator.DesignatorID}"
SelectedItem="{Binding Path=SelectedDesignator}"
ItemsSource="{Binding DesignatorList}" />
</Grid>
</telerik:Tile>
etc...
请记住,当我的 DesignatorList 是实体列表而不是自定义类时,所有这些代码都有效。
感谢您的帮助。我希望我已经充分解释了这个问题。
【问题讨论】:
-
格式化你的问题。
-
我的什么格式不正确?
-
你看到所有的编辑了吗?空行?屏幕外的东西。
-
很有趣,我觉得很好。屏幕外没有任何东西。
-
是的,因为它已被其他人编辑。回到你原来的样子。它仍然有空行。
标签: wpf xaml c#-4.0 entity-framework-4