首页 > 解决方案 > 绑定从方法获得的属性,返回对象

问题描述

我在绑定 XAML 文件时遇到问题。有一个DataContextTemplate有一个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.
}

错误: 在此处输入图像描述

标签: c#wpfxamlavalonia

解决方案


正如@BionicCode 所说,在 WPF 中,我认为 XAML 中的 Avalonia 无法绑定到方法。因此,我必须创建一个 TemplateCompositeAttributesSettingsViewModel 并在那里指定一个公共属性,然后将 DataContext TextBox 绑定到这个 ViewModel。

.xaml

<StackPanel Name="MinWidthMinHeightStackPanel" Margin="3.5" Orientation="Horizontal">
            <!--TODO-->
            <TextBox Text="{Binding MinWidth}"/> 
            <TextBlock Margin="20,0,20,0" Text="x" VerticalAlignment="Center"/>
            <!--TODO-->
            <TextBox Text="{Binding MinHeight}"/>
</StackPanel>

TemplateCompositeAttributesSettingsView.cs:

public TemplateCompositeAttributesSettingsView(Scripting.Template dataContext) : this()
{
    DataContext = dataContext;
    var templateCompositeAttributesSettingsViewModel = new TemplateCompositeAttributesSettingsViewModel( dataContext );
    this.FindControl<StackPanel>( "MinWidthMinHeightStackPanel" ).DataContext = templateCompositeAttributesSettingsViewModel;
}

TemplateCompositeAttributesSettingsViewModel.cs:

class TemplateCompositeAttributesSettingsViewModel : ViewModelBase
{
    public TemplateCompositeAttributesSettingsViewModel(Scripting.Template DataContext)
    {
        this.DataContext = DataContext;
    }

    public int MinWidth
    {
        get => DataContext.GetDisplayParams().Width;
    }

    public int MinHeight
    {
        get => DataContext.GetDisplayParams().Height;
    }

    public Scripting.Template DataContext { get; set; }
}

输出: 在此处输入图像描述


推荐阅读