2013-01-17 47 views
0

在遵循WPF的MVVM架构,学习WPF DataBindings。我有一个在运行时实例化的对象的单个实例,窗口资源中的XAML代码<p:MemoryPersistentStorageBridge x:Key="persistentMemoryBridge" />。我试图从对象实例中获取数据,并将其放到TextBox中作为示例,但我没有在该文本框中获取任何文本。MVVM WPF DataBinding疑难解答

XAML:

<Window x:Class="UserConsole.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:p="clr-namespace:PollPublicDataStock;assembly=PollPublicDataStock" 
     xmlns:local="clr-namespace:UserConsole" 
     Title="MainWindow" Height="900" Width="800"> 

    <Window.Resources> 
     <p:MemoryPersistentStorageBridge x:Key="persistentMemoryBridge" /> 
    </Window.Resources> 


    <Grid Name="grid1" > 
     <!-- layout defintions --> 
     <TextBox DataContext="{StaticResource persistentMemoryBridge}" Text="{Binding Path=GetConnectionString}" Margin="0,327,31,491" Foreground="Black" Background="Yellow"/> 
    </Grid> 
</Window> 

代码隐藏:

public class MemoryPersistentStorageBridge { 

    public MemoryPersistentStorageBridge() { 

    } 

    public string GetConnectionString() { 
     return "THISTEXTSHOULDAPPEARINTEXTBOXBUTSADLYDOESNOT"; 
    } 

} 
+0

快速查看'输出'窗口中将显示绑定错误(s)。 –

回答

3

您试图绑定到的方法。你需要绑定到一个属性。或者使用ObjectDataProvider

所以,你可以这样做:

public class MemoryPersistentStorageBridge { 

    public MemoryPersistentStorageBridge() { 

    } 

    public string ConnectionString { 
     get { return GetConnectionString(); } 
    } 

    public string GetConnectionString() { 
     return "THISTEXTSHOULDAPPEARINTEXTBOXBUTSADLYDOESNOT"; 
    } 

} 

甚至:

public class MemoryPersistentStorageBridge { 

    public MemoryPersistentStorageBridge() { 

    } 

    public string ConnectionString { 
     get { return "THISTEXTSHOULDAPPEARINTEXTBOXBUTSADLYDOESNOT"; } 
    } 

} 

当然,在任何情况下,我们不处理更改属性和通知改变的结合。

另一种选择是使用ObjectDataProvider来包装你的方法。这在我提供的链接中进行了说明。但是看起来像这样:

<ObjectDataProvider ObjectInstance="{StaticResource persistentMemoryBridge}" 
        MethodName="GetConnectionString" x:Key="connectionString"> 
</ObjectDataProvider> 
+0

是的,这是正确的...我必须等待这个答案,但在此期间...对DataBinding是新手,对WPF来说是新手,那么学习这些细节的最佳方法是什么?我发现MSDN文件不清楚。 – sammarcow

+0

@sammarcow MSDN文档非常好,有很多书。 http://msdn.microsoft.com/en-us/library/ms752347.aspx在描述的早期,它讨论了绑定到属性。 – kenny