c# - 代码隐藏中的数据绑定(bind)

标签 c# wpf data-binding

我想在类实例和两个 WPF 文本框之间设置绑定(bind)。尽管如此,文本框并没有改变它们的状态,我也不知道我做错了什么。

XAML

<DockPanel>
   <TextBlock Style="{StaticResource caption}">Testing System</TextBlock>
   <TextBlock DockPanel.Dock="Left" x:Name="txt1" Text="DC"/>
   <TextBlock DockPanel.Dock="Right" x:Name="txt2"  Text="PD"/>
   <Button Height="20" Width="100" Click="clickBinding">Bind</Button>
   <Button Height="20" Width="100" Click="clickChangeBinding">Change Status</Button>
</DockPanel>

主窗口.xaml.cs

private ADSbinding myADS = new ADSbinding();
private void clickBinding(object sender, RoutedEventArgs e)
{
   Binding b1, b2;

   b1 = new Binding();
   b2 = new Binding();
   b1.Source = myADS.DeviceConfigured;
   b2.Source = myADS.ProcessingData;


   b1.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
   b2.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

   BindingOperations.SetBinding(txt1, TextBlock.TextProperty, b1);
   BindingOperations.SetBinding(txt2, TextBlock.TextProperty, b2); 
   }

   private void clickChangeBinding(object sender, RoutedEventArgs e)
   {
      myADS.changedata();
   }

类:

public class ADSbinding : INotifyPropertyChanged
{
   public event PropertyChangedEventHandler PropertyChanged;

   private string deviceConfigured = "false";
   private string processingData = "false";

   public ADSbinding()
   {
      ProcessingData = "true";
   }

   // Get-Set methods
   public string DeviceConfigured
   {
      get { return deviceConfigured; }
      set 
      { 
         deviceConfigured = value;
         Changed("DeviceConfigured");
      }
   }
   public string ProcessingData
   {
      get { return processingData; }
      set
      {
         processingData = value;
         Changed("ProcessingData");
      }
   }

   private void Changed(string propertyName)
   {
      if (PropertyChanged != null)
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
   }

   public void changedata()
   {
      DeviceConfigured = "change";
      ProcessingData = "change";
    }
}

当按下“clickBinding”时,状态会改变,当“clickChangeBinding”时,状态会保持不变,再次单击“clickBinding”时,状态会改变。这是一次非常直接的尝试,我无法弄清楚问题出在哪里。有人吗?

最佳答案

当您创建绑定(bind)时,您将 Source 设置为对象的属性,而不是对象本身。您应该在 Binding 构造函数中指定属性名称,然后将源设置为您的对象:

    b1 = new Binding("DeviceConfigured");
    b2 = new Binding("ProcessingData");
    b1.Source = myADS;
    b2.Source = myADS;

关于c# - 代码隐藏中的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13501306/

相关文章:

c# - WPF + 在 TextBlock 中显示 bat 文件的输出

c# - WPF ContextMenu 单击时消失

android - 在 Butterknife 中使用多种方法将多个 View 绑定(bind)到一个监听器

angular - TinyMCE 和 Angular 2 : Setting The Editor's Content Based On @Input

c# - StreamReader(string) 在 Metro 的 .NET 4.5 中不存在?

c# - 从 C# 数据类生成 Java 数据类 - 是否有现成的工具/方法?

c# - WPF在 View 模型中获取鼠标坐标

asp.net-mvc - 在没有 ORM 的情况下使用 ASP.NET MVC

c# - 使用数据源将数据绑定(bind)到列表框

c# - 验证最小起订量中的可枚举列表