无论如何都要绑定属性的值,而不是属性本身。 例如:有一个通用网格,其中包含两列“名称”和“代码”
在viewmodel中:
NameMemberPath = "Title"; // fetch from database
CodeMemberPath = "ProductCode"; // fetch from database
在Xaml中:
<telerik:GridViewDataColumn UniqueName="Name" DataMemberBinding="{Binding Path=NameMemberPath}" />
<telerik:GridViewDataColumn UniqueName="Code" DataMemberBinding="{Binding Path=CodeMemberPath}" />
如何将Name绑定到NameMemberPath
的“Title”可以通过编程方式进行,但我需要以声明方式进行!
答案 0 :(得分:1)
我建议改变你的概念,因为ViewModel应该直接提供View的属性
让我们建议你想要一个绑定到Property MyAnyProb
的通用View,这样你的ViewModel就会出现这个属性的问题。
您的ViewModel现在通过提供此属性来完成他的工作
public object MyAnyProb
{
get { return getMagic(); }
set { setMagic(value); }
}
// and her is the part where you need to add your logic
private object getMagic()
{
// let magic happen
}
private void setMagic(object probValue)
{
// other magic
}
现在您可以使用您的视图通用而无需担心该属性,因为您的通用ViewModel会关注它
答案 1 :(得分:0)
例如:
var MyStrings = new List<string>();
MyStrings = MyFunctionToRetrieveAListOfStrings();
foreach(var str in MyStrings)
{
Binding binding = new Binding("YourControlValue");
binding.Source = str;
YourControl.SetBinding(TextBlock.TextProperty, binding)
}
答案 2 :(得分:0)
不,您总是将DependencyProperty
绑定到(public
)属性。
Binding http://i.msdn.microsoft.com/dynimg/IC93033.png
在MSDN中了解有关绑定的更多信息!
答案 3 :(得分:0)
恕我直言,你不能在xaml中这样做。如何从后面的代码向telerik网格添加列?我不太确定这个解决方案是否可行,但值得一试。
GridViewDataColumn column = new GridViewDataColumn();
column.DataMemberBinding = new Binding(CodeMemberPath.ToString());
this.yourTelerikGrid.Columns.Add(column);
希望这有帮助。
答案 4 :(得分:0)
关键是使用“SetBinding”方法。
TextBlock myTextBlock = new TextBlock();
myTextBlock.SetBinding(TextBlock.TextProperty, new Binding("SomePropertyName"));
应该做的伎俩