如何将代码后面的数据绑定到来自XAML的WPF标签?

时间:2015-05-04 15:44:21

标签: c# wpf xaml binding

我已经看到了一些类似的问题,但是没有一个问题对我来说足够愚蠢。我已经在C#中编码了大约两个星期并使用WPF大约两天。

我有一个班级

namespace STUFF
{
    public static class Globals
    {
        public static string[] Things= new string[]
        {   
            "First Thing"
        };
    }
}

和一个窗口

<Window
    x:Class="STUFF.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:STUFF"
    Title="STUFF"
    Height="600"
    Width="600">
<Window.Resources>
    <local:Globals x:Key="globals"/>
</Window.Resources>
<Grid>
    <Label Content="{Binding globals, Path=Things[0]}"/>
</Grid>

从XAML中将数据从代码绑定到XAML的最简单最简单的方法是什么?

这个编译并且运行正常,但标签是空白的,原因很明显,我确定,这可以逃避我。

2 个答案:

答案 0 :(得分:1)

有几个问题。

  1. 您只能绑定到属性,而不能绑定到字段。将事物定义更改为

    private readonly static string[] _things = new string[] { "First Thing" };
    public static string[] Things { get { return _things; } }
    
  2. 绑定应将global列为源。将绑定更改为此

    <Label Content="{Binding Path=Things[0], Source={StaticResource globals}}"/>
    

答案 1 :(得分:1)

由于您使用的是static class,因此您必须在x:Static中将您的来源提及为xaml

  1. 将您的字段更改为属性

    private string[] _Things;
    
    public string[] Things
    {
        get
        {
    
            if (_Things == null)
            {
                _Things = new string[] { "First Thing", "Second Thing" };
            }
            return _Things;
        }
    }
    
  2. 由于Globals是一个静态类,您必须使用x:Static

  3. 绑定它

    <Label Content="{Binding [0], Source={x:Static local:Globals.Things}}"/>