我搜索了谷歌,找不到任何特定问题的答案。
我的表单中有一个列表框,其中包含一些自定义对象。
foreach (Fixture fixture in FixtureLibrary)
{
if (fixture.ModelName == "")
{
//Nothing
}
else
{
lbxLibrary.Items.Add(fixture);
}
}
在列表框中,我想看到ModelName属性。我可以通过更改以下内容来完成此操作:
lbxLibrary.Items.Add(fixture.ModelName);
但是我需要能够从列表中选择运行时的对象,所以这种方法对我不起作用。
任何人都有任何想法,我发现所有的想法都是winforms,但这并不能帮助我,因为我正在使用WPF。
干杯chaps
麦克
答案 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" />