WPF对象获取属性列表

时间:2011-03-12 22:30:18

标签: c# wpf object listbox

我搜索了谷歌,找不到任何特定问题的答案。

我的表单中有一个列表框,其中包含一些自定义对象。

foreach (Fixture fixture in FixtureLibrary)
            {

                if (fixture.ModelName == "")
                {

                    //Nothing 

                }
                else
                {

                    lbxLibrary.Items.Add(fixture);

                }
            }

在列表框中,我想看到ModelName属性。我可以通过更改以下内容来完成此操作:

lbxLibrary.Items.Add(fixture.ModelName);

但是我需要能够从列表中选择运行时的对象,所以这种方法对我不起作用。

任何人都有任何想法,我发现所有的想法都是winforms,但这并不能帮助我,因为我正在使用WPF。

干杯chaps

麦克

2 个答案:

答案 0 :(得分:1)

你应该这样做:

使用这些属性创建一个ViewModel类,它应该在UI和业务逻辑之间进行调解。将ViewModel指定为UserControl / Window的DataContext。

文件:FixtureViewModel.cs

//TODO: implement INotifyPropertyChanged
public IList<Fixture> Fixtures
{
    get;
    set;
}

public Fixture SelectedFixture
{
    get;
    set;
}

FixtureUserControl.cs

//In the loaded eventhandler or in the constructor
this.DataContext = new FixtureViewModel();

然后只需在ViewModel-Code中的某处分配Fixtures列表。

然后,您可以在WPF中对其进行数据绑定。像这样创建一个DataTemplate并将它放在UserControls Resources或ResourceLibrary中:

<DataTemplate DataType="{x:Type yourtypenamespace:Fixture} ">
   <Grid>
       <TextBlock Text="{Binding ModelName}" />
  </Grid>
</DataTemplate>

注意DataType属性。您可能需要为Fixture对象定义命名空间。

并按照以下方式对您的列表进行数据绑定:

<ListBox ItemsSource="{Binding Fixtures}" SelectedValue="{Binding SelectedFixture}" />

然后,如果确实需要,您可以随时从ViewModel中的任何位置访问SelectedFixture对象,甚至可以访问UserControl。

答案 1 :(得分:0)

ListBox中,将DisplayMemberPath设置为ModelName对象的Fixture属性,如下所示:

<ListBox
    DisplayMemberPath="ModelName" />