【问题标题】:Data Binding to member property and providing design time value数据绑定到成员属性并提供设计时值
【发布时间】:2014-11-09 19:24:12
【问题描述】:

我尝试了解 WPF 中的数据绑定,并且我已经可以进行一些测试。
但我现在被困住了。 :(

为了更好地组织,我想将我的代码拆分为更多类,并将同一窗口的元素绑定到不同的类(实际上是绑定到不同类的属性)。

我想我必须将我的窗口的 DataContext 设置为“this”(窗口本身)并使用绑定路径来指定要使用的属性。

DataContext = this;

-

<Label Content="{Binding Path=_printSettings.CopyCount}"/>

所以 f.e.我想绑定到 CopyCount,它是一个返回字符串的属性。
该属性属于当前窗口的私有字段 _printSettings 中的实例。 _printSetting 实现了 INotifyPropertyChanged 并以双向原则通知。

但在设计和运行时标签为空...

我还注意到,在我之前的测试中,设计器中没有设置默认值。有谁知道一个实现?如果可能,不使用后备值。

-MainWindow.xaml.cs

<Label Content="{Binding ElementName=MainWindow,Path=PrintSettings.CopyCount, FallbackValue=[0]}">

-MainWindow.cs

private PrintSettings _printSettings = new PrintSettings();
public PrintSettings PrintSettings {
   get {
      return _printSettings;
   }
}

public MainWindow()
{
   DataContext = this;
}
  • PrintSettings.cs
private int _copyCount = 1;

//Copy count
public string CopyCount 
{
    get {
        return "" + _copyCount;
    }
}

-

编辑: 再次添加更多代码

【问题讨论】:

  • 检查输出应该显示绑定是否成功。您只能绑定到属性,_printSettings 也必须如此。您也可以设置 FallBackValue,它会在绑定失败时显示。
  • 是的,我做了后备测试。并显示回退值。 _printSetting 也必须是一个属性?让我试试……

标签: c# wpf data-binding


【解决方案1】:

绑定针对/通过公共属性起作用。 _printSettings 不是属性。 Visual Studio“输出”窗口可以显示您遇到的任何绑定错误。

【讨论】:

  • 嗯,是的。但是,即使数据在公共属性中,在 xaml 中指定窗口名称也会破坏功能。我花了几分钟才明白:)谢谢大家!
【解决方案2】:

_printSettingsCopyCount 应该是 public

如果没有帮助,那么在 xaml 中设置窗口名称和绑定将如下所示

<Label Content="{Binding ElementName=YourWindowName,Path=_printSettings.CopyCount}"/>

<Label Content="{Binding ElementName=YourWindowName,Path=DataContext._printSettings.CopyCount}"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多