【发布时间】:2021-11-22 12:20:05
【问题描述】:
我在绑定 XAML 文件时遇到问题。有一个 DataContext 的 Template 类有一个 GetDisplayParams() 方法。方法GetDisplayParams() 返回一个类型为TemplateDisplayParams 的对象,该对象具有Width 属性。我只需要将TextBox 绑定到此属性,但对我没有任何作用。
.xaml:
<TextBox Text="{Binding GetDisplayParams.Width}"/>
.axaml.cs:
public TemplateCompositeAttributesSettingsView(Scripting.Template dataContext) : this()
{
DataContext = dataContext;
Console.WriteLine( ((Scripting.Template)DataContext).GetDisplayParams().Width ); // return int.
}
【问题讨论】:
-
您不能绑定到 WPF 中的方法。因此,您必须将方法结果分配给您可以绑定到的公共属性。
-
@BionicCode,我会创建一个公共属性,但不幸的是,我无权访问 Template 类的源代码。我试图在 TemplateCompositeAttributesSettingsView.cs 中创建一个属性并为 TextBox 重新分配 DataContext,但我得到一个 System.Reflection.AmbiguousMatchException: "Ambiguous match found."
-
例如:如果模板类是MainWindow的DataContext,那么您可以从MainWindow的代码隐藏中调用Template.GetDisplayParams方法。在 MainWindow 上创建一个依赖属性,例如 DisplayWidth,它保存方法调用的结果。将您的 TextBox 绑定到依赖属性。您不必更改模板的代码。如果您需要更多帮助,请提供相关代码。您需要显示 TextBox 的 DataContext(如何设置)。
-
@BionicCode,我最终发现了这个问题。为 TextBox 指定 DataContext = TemplateCompositeAttributesSettingsViewModel 并在那里创建公共属性。我是 WPF 和 Avalonia 的新手,所以我的问题对很多人来说似乎很愚蠢。感谢您的帮助。
-
没问题。不客气。