c#MVVM WPF绑定到自定义嵌套属性

时间:2016-05-23 21:44:45

标签: c# wpf mvvm binding nested

因此,用了很长时间来确定实现属性绑定的最佳方法。到最后,我扔了一个hail mary赢了! ......但我不知道为什么。作为原教旨主义者,我想知道为什么这条线有效:

FormatString="{Binding ElementName=comboRingBuffer, Path=Tag.Format}"

在以下代码隐藏中:

// Argument is a struct with a Limit "property"
private Argument ringBuffer;

public Limit RingBufferPrefix
{
    get
    {
        return this.ringBuffer.Limit;
    }

    set
    {
        this.ringBuffer.Limit = value;
        this.OnPropertyChanged(nameof(this.RingBufferPrefix));
    }
}

public class Limit
{
    public Limit(string prefix, string format)
    {
        this.Prefix = prefix;
        this.Format = format;
    }

    public string Prefix { get; set; }
    public string Format { get; set; }
    public override string ToString()
    {
        return this.Prefix;
    }
}

和XAML:

<ComboBox x:Name="comboRingBuffer"
          SelectionChanged="SelectionChanged_Event"
          Tag="{Binding Path=RingBufferPrefix}" />
<xctk:IntegerUpDown x:Name="integerRingBuffer"
                    DockPanel.Dock="Right"
                    Style="{StaticResource DigitalInteger}"
                    ValueChanged="ValueChanged_Event"
                    FormatString="{Binding ElementName=comboRingBuffer, Path=Tag.Format}"
                    Value="{Binding Path=RingBuffer}" />

我确信它只会说Tagobject并且不显示任何内容。

2 个答案:

答案 0 :(得分:0)

如果你知道的话很容易理解。

DBObject<T extends DBObject<T extends DBObject<...>>>

以上行表示您绑定到名为 "{Binding ElementName=comboRingBuffer, Path=Tag.Format}" 的其他控件的属性,并且要查看的属性的名称为comboRingBuffer

您已将Tag.Format Tag comboRingBuffer绑定到Property中的媒体资源,因此ViewModel/DataContext会自动检查不知情的媒体资源。

答案 1 :(得分:0)

在PropertyPath(Binding类的Path属性)实现中发生了某种反射。

您从XAML设置的值被视为字符串,已解析和反射。

您可以使用工具检查此类的实现,如ILSpy或其他..