Diskuze: textbox binding List<string>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
nemůžeš bindovat do textBoxu celou kolekci, ale jen jeden prvek
<TextBox x:Name="textBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextWrapping="Wrap" Text="{Binding ComboList1[0]}" />
jinak bys musel zvolit nějakou ItemsControl kontrolku - třeba
<ListView x:Name="ListW" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding ComboList1}" />
Protože doslova binduješ List<> do property typu string (Text). WPF binding engine jaksi neví, co od něj chceš. Vytvoř si na toto ValueConvereter:
public class StringListToStringConverter : IValueConverter
{
//Zavolá se když source (List) má updatovat Target (TextBox.Text) - v parametru value bude právě List:
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
string temp = "";
List<string> list = (List<string>)value;
foreach(string s in list)
temp += s;
return temp;
}
//zavolá se, když má TextBox.Text updatovat List. To nevím, jak chceš udělat, je to na tobě.
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Při Bindingu potom ValueConverter specifikuješ (předpokládá se, že máš vytvořenou instanci třídy toho converteru někde v Resources v XAMLu)
<TextBox x:Name="textBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextWrapping="Wrap" Text="{Binding ComboList1, Converter={StaticResource listStringConverter}}" />
Díky páni.
Zobrazeno 4 zpráv z 4.