从C#(XAML)设置数据窗口内的textBlock文本

时间:2014-01-02 18:16:20

标签: c# wpf xaml

我开始尝试使用C#和XAML创建一个现代应用程序。我已经使用过C#了,但是我从未接触过XAML或WPF代码,所以我有一个初学者问题..

我正在使用MSFT模板Hub App(XAML),但我不知道如果该文本块位于datatemplate内,我如何通过C#代码在TextBlock上设置文本值。

有人可以帮我解决这个问题吗?

我已经用谷歌搜索了它,但我无法得到任何回答/解释的网站。

这是我正在尝试做的一个例子:

XAML:

<DataTemplate >
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Image Source="Assets/MediumGray.png" Stretch="Fill" Width="420" Height="280"/>
                        <TextBlock Style="{StaticResource SubheaderTextBlockStyle}" Grid.Row="1" Margin="0,10,0,0" TextWrapping="Wrap"  
                                   x:Uid="Section1Subtitle" Text="{Binding Score}"/>
                        <TextBlock x:Name="desc"  Grid.Row="2" Margin="0,10,0,0" 
                                   x:Uid="DescriptionHeader" Text="{Binding Test}"/>
                        <TextBlock x:Name="texttest" Grid.Row="3"
                                   Text="{Binding Name}"/>
                    </Grid>
</DataTemplate>

C#代码:

public class Class1
  {
        string name = "This is a test";

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }

我在这里做错了什么?

提前致谢,

5 个答案:

答案 0 :(得分:1)

问题解决了。

非常感谢你的帮助。

以下是带有更改的代码,允许我从C#中获取变量:

<DataTemplate>
                    <Grid>
                        <Grid.DataContext>
                            <local:Class1/>
                        </Grid.DataContext>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Image Source="Assets/MediumGray.png" Stretch="Fill" Width="420" Height="280"/>
                        <TextBlock Style="{StaticResource SubheaderTextBlockStyle}" Grid.Row="1" Margin="0,10,0,0" TextWrapping="Wrap"  
                                   x:Uid="Section1Subtitle" Text="{Binding Score}"/>
                        <TextBlock x:Name="desc"  Grid.Row="2" Margin="0,10,0,0" 
                                   x:Uid="DescriptionHeader" Text="{Binding Test}"/>
                        <TextBlock x:Name="texttest" Grid.Row="3"
                                   Text="{Binding Name}"/>
                    </Grid>
                </DataTemplate>

答案 1 :(得分:0)

本演讲还将向您介绍WP开发的许多方面,包括使用设备,动态磁贴等: http://www.jeffblankenburg.com/2011/10/31/31-days-of-mango/

虽然有点老了。

答案 2 :(得分:0)

通常无法在c#代码中轻松设置DataTemplate内部的内容。但是,通过绑定,转换器和选择器,有一些混乱的方法。

答案 3 :(得分:0)

  

XAML提供了一种简单而强大的方法来自动更新数据   商业模式和用户界面。这种机制被称为   数据绑定。每当您的业务模型数据发生变化时,   它会自动反映用户界面和副的更新   反之亦然。这是WPF中将数据提供给用户的首选方法   接口

     

数据绑定可以是单向的(来源 - >目标或目标&lt; -   源)或双向(源&lt; - &gt;目标)。

试用链接Learn XAML

答案 4 :(得分:0)

在抽象中,DataTemplate是某个数据的视觉表示。

DataTemplate中的UI元素应反映此类数据的状态。

在基于XAML的技术中,DataBinding有助于保持UI与数据同步,使用非常干净和漂亮的声明方式,而不是传统的程序编程。

所以,假设您有一些数据,例如:

public class Person
{
    public string FirstName {get;set;}

    public string LastName {get;set;}
}

然后您可能有一个表示该数据的DataTemplate,例如:

<DataTemplate DataType="local:Person">
   <StackPanel>
      <TextBlock Text="{Binding LastName}"/>
      <TextBlock Text="{Binding FirstName}"/>
   </StackPanel>
</DataTemplate>

密钥位于{Binding}声明中。

有关详细信息,请参阅上面链接的MSDN文章。