在Windows 8 App中以编程方式更新XAML数据模板

时间:2014-02-20 17:33:48

标签: c# xaml windows-store-apps windows-8.1

我有一个像这样的数据模板:

    <DataTemplate x:Key="itemTmpl">
        <Grid Margin="6">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

                <Border Height="90" Width="90" Background="#eee" />

            <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0">
                <TextBlock Text="{Binding Id}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap"/>
            </StackPanel>
        </Grid>
    </DataTemplate>

我在后面的代码中设置了List View Item Source,如下所示:

lv.ItemTemplate = (DataTemplate)this.Resources["itemTmpl"];

如何在将模板渲染到我的UI之前以编程方式更改边框背景?

1 个答案:

答案 0 :(得分:1)

你可以做一些事情:

  • 解析可视树(使用VisualTreeHelper或扩展方法,例如来自WinRTXamlToolkit),找到边框(可能是x:Name)并设置背景。
  • 将背景绑定到项目中的值
  • 将背景绑定到VM中的值

对于两个Bindings中的任何一个,您可以使用Converter将非刷子值转换为正确的刷子值(例如,如果您希望它根据Checked是否更改颜色,{{1}或者不是。)

对于第二个绑定,请确保将Source设置为VM,因为DataContext默认情况下是您的Item。另外,请确保您的Item继承自INotifyPropertyChanged,以便您的Bindings将根据数据中的更改进行更新。