簡體   English   中英

設置來自C#(XAML)的數據模板內部的textBlock文本

[英]Set textBlock text that is inside a datatemplate from C# (XAML)

我開始嘗試使用C#和XAML創建現代應用程序。 我已經使用過C#,但從未接觸過XAML或WPF代碼,因此我有一個初學者的問題。

我正在使用MSFT模板集線器應用程序(XAML),但是如果該文本塊位於數據模板內部,我不知道如何通過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; }
        }
    }

我在這里做錯了什么?

提前致謝,

問題解決了。

非常感謝您的幫助。

這是經過更改的代碼,它使我可以從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>

本指南還將引導您完成WP開發的許多方面,包括使用設備,活動磁貼等: http : //www.jeffblankenburg.com/2011/10/31/31-days-of-mango/

雖然有點舊。

通常,沒有辦法使用C#代碼輕松地在DataTemplate內部設置某些內容。 但是,有一些通過綁定,轉換器和選擇器來完成此操作的方法。

XAML提供了一種簡單而強大的方法來自動更新業務模型和用戶界面之間的數據。 此機制稱為數據綁定。 每當您的業務模型數據更改時,它都會自動反映對用戶界面的更新,反之亦然。 這是WPF中將數據帶到用戶界面的首選方法。

數據綁定可以是單向的(源->目標或目標<-源),也可以是雙向的(源<->目標)。

試用鏈接了解XAML

抽象來說, DataTemplate某個Data可視表示

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文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM