/ / Поддържане на тип при свързване към динамичен обект - WPF / C # - c #, wpf

Поддържане на тип при свързване към динамичен обект - WPF / C # - c #, wpf

Кажи, че имам клас, който е така ...

public class Field
{
public Field(string fieldname, object fieldValue = null)
{
FieldName = fieldname;
FieldValue = fieldValue;
}

public string FieldName { get; set; }
public object FieldValue { get; set; }

}

След това се обвързвам с класа като такъв ...

<Label Width="Auto" Content="{Binding FieldlName}"></Label>
<TextBox Width="Auto" Text="{Binding FieldValue, FallbackValue="error", UpdateSourceTrigger=PropertyChanged}"></TextBox>

Имам проблем, когато FieldValue е зададено като цяло число в кода зад, но потребителят написва различно цяло число в текстовото поле, след което типът се променя на низ.

Обаче това, което очаквам, е стойностите да запазят типа си.

Разбирам, че проблемът е, че Text property е низ и се опитва да направи реализация.

Ето защо това, което търся, е средство за поддържане на имплицитния тип, някакъв вид валидация, някакъв конвертор, нещо на поглъщателя ... това не съм съвсем сигурен в това?

Отговори:

1 за отговор № 1

Стойността на текстовото поле винаги е низ,няма начин да промените това (освен ако не използвате друг компонент). Въпреки това, WPF свързващият двигател се опитва да конвертира типове, когато актуализира свързаните свойства.

Когато собствеността на модела ви на изглед е от тип string след това типът на насочването съответства на типа на източника (текстовото поле на текстовото поле), така че всичко се актуализира.

Така че, когато собствеността на визуалния ви модел е от типа int, тогава каквото и да влезете в текстовото поле ще бъдеда се опитаме да бъдем превърнати в int. Ако това работи, това е добре; ако тя не е собственост на модела на изгледа не се актуализира и вместо това се изхвърля обвързващо изключение.

Сега, когато собствеността на визуалния ви модел е от типа object, след което WPF се опитва да съхрани низ стойността в собствеността на модела на изгледа, тогава то просто работи. Независимо от предишната си стойност (независимо дали е int или друг обект). От string е подтип на object, двигателят може просто да зададе низ на object собственост, така че не се извършва преобразуване на тип.