因此,用了很长时间来确定实现属性绑定的最佳方法。到最后,我扔了一个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}" />
我确信它只会说Tag
是object
并且不显示任何内容。
答案 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或其他..