WPF Список объектов get property - PullRequest
0 голосов
/ 13 марта 2011

Я искал в Google и не могу найти ответы на конкретную проблему.

В моей форме есть список, в котором есть несколько пользовательских объектов.

foreach (Fixture fixture in FixtureLibrary)
            {

                if (fixture.ModelName == "")
                {

                    //Nothing 

                }
                else
                {

                    lbxLibrary.Items.Add(fixture);

                }
            }

В списке я хотел бы видеть свойство ModelName.Я могу сделать это, изменив следующее:

lbxLibrary.Items.Add(fixture.ModelName);

Но мне нужно иметь возможность выбирать объект во время выполнения из списка, поэтому этот подход не будет работать для меня.

У кого-нибудь есть идеи, все, что я нашел, это для winforms, но это не очень помогает мне, так как я использую WPF.

Приветствия, парни

Майк.

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Вы должны сделать это так:

Создайте класс ViewModel с этими свойствами, он должен быть посредником между пользовательским интерфейсом и вашей бизнес-логикой. Назначьте ViewModel как DataContext вашего UserControl / Window.

Файл: 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-коде.

Затем вы можете связать его в WPF. Создайте шаблон данных, подобный этому, и поместите его в свои ресурсы UserControls или в ResourceLibrary:

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

Обратите внимание на атрибут DataType. Возможно, вам нужно определить пространство имен для вашего объекта Fixture.

И добавьте данные в свой список следующим образом:

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

Тогда вы всегда можете получить доступ к объекту SelectedFixture из любой точки ViewModel или даже из UserControl, если вам действительно нужно.

0 голосов
/ 13 марта 2011

В ListBox установите DisplayMemberPath как свойство ModelName вашего объекта Fixture, например:

<ListBox
    DisplayMemberPath="ModelName" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...