1

我再次陷入了一些数据绑定问题。
这次我想将 a 绑定ListViewSelectedItema 的GridView。我已经成功使用了这种类型的数据绑定,但现在 myListView应该显示有关我在 my 中所选项目的一些详细信息GridView只是保持空白。尽管它们应该存在,但其中没有任何项目。
在 my 中的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财产是一个IList<OrderYears>
OrderYears遵循 my 中定义的数据值对象MainViewModel

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

2 回答 2

1

我认为问题出在 ListView 绑定中,因为您尝试绑定到名为“Orders”的属性,该属性在 OrderYears 对象中不存在。您有一个可以绑定到的名为 DoneOrders 的属性(不要将属性名称与列表中元素的类型混淆!),但是如果您将 TextBlock 绑定到 IList,您将只获得 IList 对象的 guid。

尝试这样的事情,用 ListBox 替换你的 ListView (这对于你在这里尝试做的事情已经足够了):

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

无需创建模板,ListBox 内的项目将像文本块一样显示。请注意,您可以从绑定到 MainProperty.SubProperty 等嵌套属性中受益。

让我知道这是否有帮助,当您开始时,绑定可能会让人头疼......

于 2012-12-28T19:49:08.427 回答
0

终于我明白了。
经过数小时的反复试验,终于DataContextItemsSource做的伎俩代替......
有时事情比你想象的要容易:)

于 2012-12-29T01:45:50.157 回答