2013-03-25 89 views
11

我想要的属性,以绑定一个系列在网格文本框的成对象本身是在我的视图模型(在DataContext)另一属性的性质。结合到对象

CurrentPersonNameAge性能

视图模型内部:

public Person CurrentPerson { get; set ... (with OnPropertyChanged)} 

的XAML:

<TextBox Text="{Binding Name}" > 
<TextBox Text="{Binding Age}" > 

我不知道的方法来使用,我设置另一个DataContext在网格范围内,没有任何结果,也尝试过s如Source = CurrentPerson,Path = Age等源代码和路径再次没有任何结果,这些是用于试验,看看是否会有任何改变。

我该怎么做到这一点?

回答

17

请问您的Person班级成员NameAge是否自己提出INPC?

如果您想更新在ViewModel要么NameAge的价值并使其在视图中反映,你需要他们提高物业内Person类单独改变了。

绑定很好,但视图几乎没有通知视图模型的变化。还记得UpdateSourceTriggerTextBox默认为LostFocus,设置为PropertyChanged将更新您输入的ViewModel中的字符串。

简单的例子:

public class Person : INotifyPropertyChanged { 
    private string _name; 
    public string Name { 
    get { 
     return _name; 
    } 

    set { 
     if (value == _name) 
     return; 

     _name = value; 
     OnPropertyChanged(() => Name); 
    } 
    } 

    // Similarly for Age ... 
} 

现在你的XAML是:

<StackPanel DataContext="{Binding CurrentPerson}"> 
    <TextBox Text="{Binding Name}" /> 
    <TextBox Margin="15" 
      Text="{Binding Age}" /> 
</StackPanel> 

,或者您也可以通过绑定@Kshitij

的建议
<StackPanel> 
    <TextBox Text="{Binding CurrentPerson.Name}" /> 
    <TextBox Margin="15" 
      Text="{Binding CurrentPerson.Age}" /> 
</StackPanel> 

,并更新视图模型你的打字

<StackPanel DataContext="{Binding CurrentPerson}"> 
    <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" /> 
    <TextBox Margin="15" 
      Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" /> 
</StackPanel> 
+0

明白了,谢谢 – LastBye 2013-03-25 11:11:29

12

试试这个:

<TextBox Text="{Binding CurrentPerson.Name}" /> 
<TextBox Text="{Binding CurrentPerson.Age}" /> 

本质上讲,你可以通过使用.分离器深入到性能。

以供将来参考,如果你想深入到集合,您可以使用MyCollection[x]就像你在代码中(其中x会被硬编码号码代替,不是一个变量)。

+0

+1谢谢你的信息,不确定在Xaml部分我可以使用这个,但我想我也尝试过这种方式。这种方法再次没有结果,CurrentPerson定义并触发NotifyPropertyChanged,但可能还有一些缺失。 – LastBye 2013-03-25 09:25:06

+0

似乎通知改变不会采取这种行动。这是真的吗?我应该如何解决这个问题? – LastBye 2013-03-25 09:38:46

+0

还没有为我工作。不知道为什么... – LastBye 2013-03-25 10:00:35