Итак, это был длинный день, когда выяснилось, что способ реализовать привязку свойства - это . К концу этого я бросил hail mary и выиграл! ... но я не знаю почему. Будучи фундаменталистов, я хотел бы знать, почему эта линия работала:C# MVVM WPF привязка к пользовательскому вложенному свойству
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
и ничего не отображают.
Но все это знает, что 'ComboBox' имеет' Tag', который должен быть 'object'. Как он знал тип 'Limit', который был связан с этим свойством? – reasra
Что вы имели в виду под Limit? я предлагаю вам перейти через [this] (http://stackoverflow.com/a/7000922/2470362) и понять, как конвертер используется для соответствия типу свойства зависимостей. В вашем случае вы передаете один и тот же тип привязки, иначе он может вызывать ошибку во время выполнения. –