2

这似乎是一个棘手的问题。至少,很难描述。

基本上,我将 GridView 的 itemsSource 设置为对象列表,并且我希望 GridView 中的每个项目都可以访问它在自己的代码中生成的对象。

以下是一些片段,我希望能说出我的意思:

阅读Page.xaml.cs

zoomedInGrid.ItemsSource = openChapters.chapters; //A List<BibleChapter>

阅读页面.xaml

<GridView x:Name="zoomedInGrid">
   <GridView.ItemTemplate>
       <DataTemplate>
           <local:ChapterBox Chapter="" />
           <!--I have no idea what to put here^^^-->
       </DataTemplate>
   </GridView.ItemTemplate>
</GridView>

然后在 ChapterBox.xaml.cs 中,我需要访问创建模板化 ChapterBox 的 BibleChapter。

有人知道怎么做吗?

编辑

这就是我在 ChapterBox.xaml.cs 中的内容:

public static readonly DependencyProperty ChapterProperty =
    DependencyProperty.Register("Chapter",
        typeof(BibleChapter),
        typeof(ChapterBox),
        null);

public BibleChapter Chapter
{
    get { return (BibleChapter)GetValue(ChapterProperty); }
    set { SetValue(ChapterProperty, value); }
}

public ChapterBox()
{
    this.InitializeComponent();
    VerseRichTextBuilder builder = new VerseRichTextBuilder();
    builder.Build(textBlock, Chapter); //<== Chapter is null at this point
}
4

2 回答 2

1

如果Chapter是 DependencyProperty,那么您可以简单地执行以下操作:

<local:ChapterBox Chapter="{Binding}" />

这会将单个项目的实例设置为绑定到任何Chapter内容,显然如果类型不匹配,您可以使用转换器。或者,您可能应该看看简单地设置DataContext用户控件:

<local:ChapterBox DataContext="{Binding}" ... />
于 2013-08-02T04:39:54.630 回答
1

向类中添加依赖属性ChapterBox,然后在 XAML 中使用双向绑定:

<local:ChapterBox Chapter="{Binding Mode=TwoWay}" />

DP 看起来像这样(假设您使用的是 WPF,但它与 Silverlight 类似):

public static readonly DependencyProperty ChapterProperty = 
    DependencyProperty.Register("Chapter", 
        // property type
        typeof(BibleChapter), 
        // property owner type
        typeof(ChapterBox), 
        new UIPropertyMetadata(new PropertyChangedCallback(OnChapterChanged)));

public static void OnChapterChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
    var chapterBox = (ChapterBox)sender;

    VerseRichTextBuilder builder = new VerseRichTextBuilder();
    var newValue = (Chapter)args.NewValue;
    builder.Build(chapterBox.textBlock, newValue); 
}

public BibleChapter Chapter
{
    get { return (BibleChapter)GetValue(ChapterProperty); }
    set { SetValue(ChapterProperty, value); }
}

请注意,ChapterPropertyDP 实际上是绑定,而视图模型属性 ( BibleChapter) 是目标。但是,当您设置 时Mode=TwoWay,它会导致属性从目标更新源。

于 2013-08-02T04:45:34.047 回答