将C#中的变量数据绑定到WPF应用程序中的文本块不起作用

时间:2014-07-02 09:39:42

标签: c# wpf xaml

XAML,C#新手,我正努力将我的代码中定义的变量数据绑定到XAML中定义的文本块。但我得不到结果。

这是我的XAML

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    Loaded="Window_Loaded_1">
<Grid>
    <TextBlock Name="totalRecording">
                        <Run Text="44 /"/>
                        <Run Text="{Binding Source=listlength, Path=totalRecording}"/>
    </TextBlock>
</Grid>

这是我背后的代码

namespace WpfApplication1
{

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded_1(object sender, RoutedEventArgs e)
    {
        var listlength = 100;
    }
}
}

现在我只是为了说明我的问题而将变量设置为静态数字,但是这个变量将从列表Count值中获得。

3 个答案:

答案 0 :(得分:7)

对于绑定,您只需要使用属性。您不能使用varibale进行绑定。

要创建属性,我创建一个类

  public class TextboxText
{
    public string textdata { get; set; }

}

并将datacontext设置为textblock,以便我可以使用此属性进行绑定

InitializeComponent();
totalRecording.DataContext = new TextboxText() { textdata = "100" };

in xaml

<Grid Height="300" Width="400" Background="Red">
    <TextBlock Name="totalRecording">
       <Run Text="44 /"/>
       <Run Text="{Binding textdata}"/>
    </TextBlock>
</Grid

答案 1 :(得分:1)

如果您想更新 Binding,您应该使用 DependencyProperty

首先,您需要创建属性公共字符串,如下所示:

public static readonly DependencyProperty ListLengthProperty =
        DependencyProperty.Register("ListLength", typeof(string), typeof(Window), new PropertyMetadata(null));

    public string ListLength
    {
        get { return (string)GetValue(ListLengthProperty); }
        set { SetValue(ListLengthProperty, value); }
    }

以下是 XAML 文件,您需要为该窗口设置名称

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="CurrentWindow"
    Title="MainWindow" Height="350" Width="525"
    Loaded="Window_Loaded_1">
<Grid>
    <TextBlock Name="totalRecording">
                    <Run Text="44 /"/>
                    <Run Text="{Binding ListLength, ElementName=CurrentWindow}"/>
    </TextBlock>
</Grid>

现在您可以通过设置 ListLength 来更新Binding:

ListLength = "100";

答案 2 :(得分:0)

只需使用TextBlock,

     <Grid Name="myGrid" Height="437.274">
      <TextBox Text="{Binding Path=listlength}"/>
    </Grid>

声明变量并实施InotifyPropertyChanged

    partial class Window1 : Window, INotifyPropertyChanged
    {
      public event PropertyChangedEventHandler PropertyChanged;

      private string _listlength;

      public string Listlength
      {
        get { return _listlength; }
        set
        {
          if (value != _listlength)
          {
             _listlength = value;
             OnPropertyChanged("Listlength");
          }
        }
      }

}