(C#) DataBinding 以编程方式布局

Posted

技术标签:

【中文标题】(C#) DataBinding 以编程方式布局【英文标题】:(C#) DataBinding layout programmatically 【发布时间】:2016-06-15 05:11:03 【问题描述】:

我有这个带有帐户网格的 xaml:

<UserControl x:Class="SpectroCoin.Controls.AccountInfo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:effects="clr-namespace:SpectroCoin.Effects"
    FontFamily="StaticResource PhoneFontFamilyNormal"
    FontSize="StaticResource PhoneFontSizeNormal"
    Foreground="StaticResource PhoneForegroundBrush"
    d:DesignHeight="130" d:DesignWidth="480">
    <UserControl.Resources>
        <Style x:Key="MainInfoStyle" TargetType="TextBlock">
            <Setter Property="FontSize" Value="32"/>
            <Setter Property="VerticalAlignment" Value="Bottom"/>
        </Style>
        <Style x:Key="ReservedInfoStyle" TargetType="TextBlock">
            <Setter Property="FontSize" Value="20"/>
            <Setter Property="VerticalAlignment" Value="Bottom"/>
        </Style>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Margin="0,0,0,0" >
        <StackPanel Orientation="Vertical" Grid.Column="0" Margin="0,0,0,0">
            <TextBlock FontSize="24" Text="Label" x:Name="txtLabel" Margin="0"/>
            <TextBlock FontSize="50" Text="Binding Account.AvailableStr" Margin="50,-10,0,0" Foreground="#FFF9AF28"/>
            <TextBlock FontSize="24" Margin="50,-15,0,0" Visibility="Binding ReservedVisibility">    
                <Run Foreground="Gainsboro" Text="Binding LocalizedResources.reserved, Source=StaticResource LocalizedStrings, StringFormat='\0\ '"/>
                <Run Foreground="Gainsboro" Text="Binding Account.ReservedStr"/>
            </TextBlock>
        </StackPanel>
    </Grid>
</UserControl>

我正在为我使用 foreach 的每个帐户以编程方式添加此布局:

foreach (Account.Account account in GetModel().BalancePageModel.Accounts)

    var myAccountInfoControl = new AccountInfo(account);
    //myAccountInfoControl.txtLabel.SetBinding()
    AccountsInfo.Children.Add(myAccountInfoControl);

我的布局已创建,但 AvailableStr、txtLabel 和 ReservedStr 的值没有改变,因为我没有以编程方式启用数据绑定,我该怎么做?

【问题讨论】:

【参考方案1】:

您必须将 myAccountInfoControl 的 DataContext 设置为帐户对象。 myAccountInfoControl.DataContext = account;

如果您这样做,则应通过删除“帐户”来更改您在 XAML 中所做的绑定。像这样的部分:

希望对您有所帮助。

【讨论】:

以上是关于(C#) DataBinding 以编程方式布局的主要内容,如果未能解决你的问题,请参考以下文章

用c#以编程方式编译生成的.cpp文件?

如何在 C# 中进行数据绑定?

JetpackDataBinding 架构组件 ( 数据绑定技术简介 | Android 中的 DataBinding 数据绑定 | 启动数据绑定 | 定义数据类 | 布局文件转换 )

android -------- MVP+DataBinding 的使用

DataBinding 组件未转换为 Object

使用 C# 以编程方式向 MVC 控制器验证 Azure Ad/OpenId 并获取重定向 uri