【问题标题】:Programatically Update XAML Data Template in Windows 8 App在 Windows 8 应用程序中以编程方式更新 XAML 数据模板
【发布时间】:2014-02-20 17:33:48
【问题描述】:

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

    <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>

我在后面的代码中设置一个列表视图项目源,如下所示:

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

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

【问题讨论】:

  • 它(背景)是否取决于项目?

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


【解决方案1】:

你可以做一些事情:

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

对于这两个绑定中的任何一个,您都可以使用转换器将非画笔值转换为正确的画笔值(例如,如果您希望它根据是否选中来更改颜色,bool,与否)。

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

【讨论】:

  • 非常感谢您的回复。不幸的是,没有一种简单的方法可以做到这一点。然而,VM 方法是有一定意义的。我只是讨厌污染我的 POCO 数据模型,你知道吗?
  • 有没有一种简单的方法可以在不引入依赖的情况下解析可视化树?
  • 使用VisualTreeHelper.GetChild 递归遍历可视化树。您可以创建一个辅助方法并在整个过程中使用它。
猜你喜欢
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多