Список, связанный через ElementName, остается пустым

Я снова застрял в какой-то проблеме с привязкой данных.
На этот раз я хочу связать ListView к SelectedItem из GridView, Я уже преуспел с этим типом привязки данных, но теперь мой ListView, который должен показать некоторые детали о моем выбранном элементе в моем GridView просто остается пустым. В нем нет предметов, хотя они должны существовать.
GridView связывает очень хорошо на имущество в моем MainViewModel,
Подставляя ElementName приписать с x:Resouces кажется, не вариант, потому что он тоже не работает.
Исходный вид:

<GridView x:Name="gridViewOrderYears" 
          ItemsSource="{Binding SelectedCustOrders, Mode=TwoWay}"
          HorizontalAlignment="Left" 
          Grid.Row="1" 
          VerticalAlignment="Top" 
          Width="316" 
          Height="63" 
          Margin="657,316,0,0"
          SelectionMode="Single">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Border BorderThickness="1" BorderBrush="Aquamarine">
                    <StackPanel>
                        <TextBlock Text="{Binding Year}" FontSize="20"/>
                        <TextBlock Text="{Binding OrderCount}"/>
                    </StackPanel>
                </Border>
            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

это представление не связывает:

<ListView HorizontalAlignment="Left" 
          Height="231" 
          Margin="657,401,0,0" 
          Grid.Row="1" 
          VerticalAlignment="Top" 
          Width="316"
          DataContext="{Binding SelectedItem, ElementName=gridViewOrderYears}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DoneOrders.Order_Date, ElementName=gridViewOrderYears}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

SelectedCustOrders Porperty является IList<OrderYears>,
OrderYears следующий объект значения данных, определенный в моем MainViewModel:

public class OrderYears
    {
        public int? Year { get; set; }
        public IList<Orders> DoneOrders { get; set; }
        public int OrderCount { get; set; }
    }

2 ответа

Решение

Наконец то я понял.
После нескольких часов проб и ошибок, наконец, заменив DataContext с ItemsSource сделал трюк...
Иногда все проще, чем вы думаете:)

Я думаю, что проблема в привязке ListView, потому что вы пытаетесь привязать к свойству с именем "Orders", которое не существует в объекте OrderYears. У вас есть свойство с именем DoneOrders, с которым вы можете связать (не путайте имя свойства с типом элементов в списке!), Но если вы связываете TextBlock с IList, вы просто получите guid для объекта IList.

Попробуйте что-то вроде этого, заменив ListView на ListBox (этого достаточно для того, что вы пытаетесь сделать здесь):

 <ListBox DataContext="{Binding ElementName=gridViewOrderYears, 
                                Path=SelectedItem.DoneOrders}" 
          DisplayMemberPath="Order_Date"/>

Нет необходимости создавать шаблон, элементы внутри ListBox будут отображаться как TextBlock. Обратите внимание, что вы можете извлечь выгоду из привязки к вложенным свойствам, таким как MainProperty.SubProperty.

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

Другие вопросы по тегам