在mainwindow中绑定一个对象

时间:2012-08-15 23:07:41

标签: c# wpf xaml data-binding

Sry fot the title,如果你有更好的请编辑。

如果我在这样的资源中使用wpf中的对象创建,我有一个工作代码:

<local:PersonView x:Key="Persons"/>

但我想使用在mainwindow中创建的对象,这是工作代码:

    <Grid>
        <Grid.Resources>
            <local:PersonView x:Key="Persons"/>
            <CollectionViewSource x:Key="ViewPersons" Source="{Binding Source={StaticResource Persons}, Path=Persons}">
                <CollectionViewSource.GroupDescriptions>
                    <PropertyGroupDescription PropertyName="Name"/>
                </CollectionViewSource.GroupDescriptions>
            </CollectionViewSource>
        </Grid.Resources>
        <ListView ItemsSource="{Binding Source={StaticResource ViewPersons}}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="100" Header="Name" DisplayMemberBinding="{Binding Name}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>

我使用的课程:

    public class Person
    {
        public string Name { get; set; }
    }

    public class PersonView
    {
        public ObservableCollection<Person> Persons { get; set; }

        public PersonView()
        {
            Persons = new ObservableCollection<Person>();
            Persons.Add(new Person() { Name = "Luis" });
            Persons.Add(new Person() { Name = "Gusth" });
        }
    }

此代码有效,但我想将CollectionViewSource绑定到在mainwindow中创建的对象:

    public partial class MainWindow : Window
    {
        public PersonView BindThis { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            BindThis = new PersonView();
        }
    }

我试试这个但是不行:

<CollectionViewSource x:Key="ViewPersons" Source="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=BindThis}">
                <CollectionViewSource.GroupDescriptions>
                    <PropertyGroupDescription PropertyName="Name"/>
                </CollectionViewSource.GroupDescriptions>
            </CollectionViewSource>

1 个答案:

答案 0 :(得分:1)

Sry伙计们,我花了很长时间试图解决这个问题。但是刚才我开始工作了。这种绑定的东西仍然让我很困惑。希望它对某人有所帮助。

修复:

public class PersonView : ObservableCollection<Person>
{
    public PersonView()
    {
        Add(new Person() { Name = "Luis" });
        Add(new Person() { Name = "Gusth" });
    }
}