绑定到字符串属性的值

时间:2014-02-07 08:11:01

标签: wpf data-binding

无论如何都要绑定属性的值,而不是属性本身。 例如:有一个通用网格,其中包含两列“名称”和“代码”

在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”

可以通过编程方式进行,但我需要以声明方式进行!

5 个答案:

答案 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)
}

http://msdn.microsoft.com/en-us/library/ms742863.aspx

答案 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"));

应该做的伎俩