Привязка к свойству в ItemsSource - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть класс, подобный следующему:

class test
{
  public string Name;
  public string Location;
}

В результате запроса, использующего структуру сущностей, я получаю коллекцию тестовых объектов, которые я прямо устанавливаю в своем списке. Но с помощью DisplayMemberPath Iam просто отображается значение имени. Итак, теперь список содержит всю коллекцию тестовых объектов, а просто отображает значение имени.

Когда я пытаюсь привязать выбранный элемент списка, я получаю весь тестовый объект в виде строки, но мне просто нужно значение имени в результате выбранного элемента.

Мой XAML выглядит следующим образом:

<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedItem="{Binding Name, Mode=TwoWay}" />

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

 LoadOperation<test> subLoadOp = context.Load(context.GetTestQuery());
 lbSubSelector.ItemsSource = subLoadOp.Entities;
 lbSubDistrictSelector.DataContext = SkillModel.Instance;

DataContext, для которого установлен selectedItem, имеет значение целого строкового представления тестового объекта, но я хочу, чтобы selecteditem просто возвращал значение Name во время его отображения (так как я установил displayplacepath в Name) вместо вернул весь объект в строковом формате.

Как мне этого добиться?

Ответы [ 3 ]

3 голосов
/ 14 ноября 2011

Используйте следующее:

<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedValuePath="@Name" />

Тогда вы можете использовать lbSubSelector.SelectedValue , чтобы получить свойство Name выбранного элемента.

см. http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedvaluepath.aspx

0 голосов
/ 14 ноября 2011

Вместо использования ListBox я бы предложил вам использовать ListView с GridColumns. Ниже приведен фрагмент кода, вам может потребоваться изменить его соответствующим образом. Но это, безусловно, будет работать так, как вы хотите: -

<ListView Name="ListView1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding}" MouseDoubleClick="transactionListView_MouseDoubleClick" IsSynchronizedWithCurrentItem="True" >
                    <ListView.View>
                        <GridView ColumnHeaderContainerStyle="{StaticResource gridViewHeaderColumnStyle}">
                            <GridView.Columns>
                                <GridViewColumn Width="70" Header="Name" DisplayMemberBinding="{Binding Path=Name}" />
                                <GridViewColumn Width="270" Header="Seller" DisplayMemberBinding="{Binding Path=Location}" />
                            </GridView.Columns>
                        </GridView>
                    </ListView.View>
                </ListView>
0 голосов
/ 14 ноября 2011

Используйте свойство IsSynchronizedWithCurrentItem в списке и измените привязку SelectedItem на / Name в коде xaml следующим образом:

<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedItem="{Binding /Name, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...