这看起来很棘手。至少,描述起来很棘手。
基本上,我将GridView的itemsSource设置为对象列表,我希望GridView中的每个项目都能访问它自己代码中生成的对象。
以下是一些片段,我希望能说出我的意思:
ReadingPage.xaml.cs
zoomedInGrid.ItemsSource = openChapters.chapters; //A List<BibleChapter>
ReadingPage.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中,我需要访问BibleChapter,模板化的ChapterBox是为其创建的。
任何人都知道怎么做?
修改
这就是我在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
}
答案 0 :(得分:1)
如果Chapter
是DependencyProperty,那么您可以执行以下操作:
<local:ChapterBox Chapter="{Binding}" />
这会将单个项目的实例设置为绑定到Chapter
的任何内容,显然如果类型不匹配,则可以使用转换器。或者,您可能只需要设置用户控件的DataContext
:
<local:ChapterBox DataContext="{Binding}" ... />
答案 1 :(得分: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); }
}
请注意,ChapterProperty
DP实际上是绑定源,而视图模型属性(BibleChapter
)是目标。但是,当您设置Mode=TwoWay
时,会导致该属性更新目标源。