如何绑定到WPF中的属性的属性

时间:2010-08-02 20:59:16

标签: wpf data-binding

我有一个listview,他的itemssource是MyModel的ObservableCollection。我试图找出如何将文本框文本的属性绑定到模型的所有者属性的Name属性

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
    //...
}

public class MyModel
{
    public string Title { get; set; }
    public Person Owner { get; set; }
    //...
}

我试过了:

<TextBlock Text="{Binding Owner.Name}" /> 

但是文本块留空了。什么是正确的语法?

4 个答案:

答案 0 :(得分:1)

绑定看起来很好。我假设您将TextBlock放入DataTemplate并将其附加到ListView。如果是,那应该有效。

要查找错误,请通过文字替换Binding以查看是否有某些行(必须在每行中显示文字)。如果没有,请检查ItemsSource。如果是,请检查您的Person - 实例是否附加了MyModel - 对象,并且Name - 属性不为null或为空。检查VS的输出窗口。在那里你会看到binding-errormessages。

如果你没有DataTemplate,这里有一个例子:

 <ListView ItemsSource="[Your ItemsSource]">
    <ListView.ItemTemplate>                
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding Owner.Name}"/>
            </Grid>                    
        </DataTemplate>                
    </ListView.ItemTemplate>                                    
 </ListView>

答案 1 :(得分:0)

检查DataContext是否设置正确并实现INotifyPropertyChanged(引发属性值更改时定义的事件。)。

答案 2 :(得分:0)

尝试使用VS 2010的数据源向导表单 我只是添加这些类并单击,clik,clik

<TextBox Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="3" Name="nameTextBox" Text="{Binding Path=Owner.Name, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" />

答案 3 :(得分:-1)

<Slider  Margin="81,161.66,66,0" Name="Height" Minimum="0" Maximum="10" Width="400"></Slider>
<Slider Margin="81,1.66,66,0"  Name="Width" Minimum="0" Maximum="10" Width="400"/>
<Ellipse Height="{Binding ElementName=Height}" Width="{Binding ElementName=Width}"  Fill="Blue" ></Ellipse>