1

我有一个 Viewmodel,其中包含名为 Projects 和Users的属性。Project 类包含 Project Manager、Date、AssignedTo 属性。在我看来,我有一个网格,其中我的 itemsource 绑定到 Projects,并且 datacolumns 绑定到 Project Manager、Date 和 Assigned To。

现在,我通过添加自动完成文本框向 AssignedTo 列添加了一个单元格编辑模板,因此当用户编辑该列时,它会自动给出建议的用户值。我现在的问题是我希望这个自动完成文本框的 ItemSource 绑定到我的 ViewModel 的属性,即用户(这是一个字符串列表)。由于网格已经绑定到项目,我如何强制 celledit 模板绑定到我的 ViewModel 中的另一个属性,即Users

我知道有一些方法可以做到这一点,例如将另一个演示属性附加到项目,但我不想这样做,因为这个类在我的应用程序中使用了很多。我确实尝试了不同类型的绑定,例如相对源,但在这个阶段似乎没有任何工作正常。也许我错过了一些东西,或者真的没有办法做到这一点?

4

1 回答 1

0

我见过的最好的方法是使用所谓的“数据上下文代理”。将其放在 XAML 文档的资源部分中,例如:

<Window.Resources>
    <local:DataContextProxy x:Key="DataContextProxy" />
</Window.Resources>

现在,您可以从自动完成集合中将其作为静态资源绑定到它,例如:

ItemsSource="{Binding Path=DataContext.MyViewModel.AutoCompleteItems,Source={StaticResource DataContextProxy}}"

(请注意,您必须在路径前加上前缀DataContext才能获得正确的绑定。)

我不太明白为什么RelativeSource绑定在这些情况下不起作用,但是在尝试从数据网格内部进行绑定时我遇到了类似的麻烦。但是,这种数据上下文代理方法很容易使用,并且可以完成工作。

于 2012-09-10T05:25:38.857 回答