WPF - Связывание переменной в уже связанном ListBox? - PullRequest
0 голосов
/ 12 июня 2010

Я действительно не знаю, как озаглавить этот вопрос, но мне нужна помощь с привязкой к ListBox.

У меня есть объект, который содержит (помимо прочего) 2 свойства, которые необходимо связать в одном ListBox. Одним из них является ObservableCollection объектов, называемых слоями, а другое свойство содержит значение перечисления Point, Line или Polygon, называемое SpatialType. Они должны выступать в качестве легенды для приложения карты. Я связал слои с ListBox, без проблем, но внутри ListBox.ItemTemplate мне нужно привязать одну переменную SpatialType к каждому элементу в ListBox. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь выполнить привязку внутри ListBox, единственные переменные, к которым у меня есть доступ, - это свойства каждого слоя, и я не могу получить доступ ни к каким свойствам исходного связанного класса, который содержит слои ( и необходимое свойство SpatialType).

Что я могу сделать, чтобы связать эту информацию внутри ItemTemplate, не испортив хорошую архитектуру MVVM?

Ответы [ 2 ]

0 голосов
/ 09 июля 2010

В итоге я использовал FindAncestor, чтобы получить DataContext более высокого «уровня» в привязке:

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.LayerSymbolization.SpatialType, Mode=TwoWay}"
0 голосов
/ 12 июня 2010

Вы можете, по вашему мнению, иметь ObjectDataProvider, который является основой для вашего текста данных, и иметь точку ObjectInstance для вашей модели представления. Затем вы можете выполнить привязку из ItemTemplate следующим образом:

<UserControl.Resources>
     <ObjectDataProvider x:Key="Data"/>
     <DataTemplate x:Key="Template">
         <TextBlock Text="{Binding SpatialType,Source={StaticResource Data}}/>
     </DataTemplate>
</UserControl.Resources>
<Grid DataContext={Binding Source={StaticResource Data}}>
     <ListBox ItemsSource="{Binding Layers}" ItemTemplate="{StaticResource Template}"/>
</Grid>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...