У меня есть следующий код XAML:Binding к списку <string> не обновляет соответствующие строки
<Window x:Class="WpfApplication1.MainWindow"
x:Name="window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="327" Width="213"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox ItemsSource="{Binding Strings}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=., UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox Grid.Row="1" Text="{Binding TheString}" />
<Button Click="ButtonBase_OnClick" Grid.Row="2">Check strings</Button>
</Grid>
</Window>
Довольно простой. Теперь вот мой код позади:
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
}
public List<string> Strings { get; } = new List<string> { "Hello world1", "Hello world2", "Hello world3" };
public string TheString { get; set; } = "Helloo";
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
MessageBox.Show(string.Join("\n", this.Strings) + $"\n\n{this.TheString}");
}
}
Проблема заключается в том, если я обновлю строковые значения в Strings
списке из пользовательского интерфейса, он никогда не обновляется при нажатии на кнопку. Что я делаю не так?
Я правильно привязываю Listbox
ItemsSource
к списку Strings
. Я также правильно привязываю TextBox
в ItemTemplate
.
охвата, но добавить режим = TwoWay в TextBox – Paparazzi
По умолчанию режима для TextBox является TwoWay, однако у вас нет сеттера для вашего списка. Если нет Setter, я думаю, что ваша коллекция будет доступна только для чтения, поэтому вы не сможете ее обновить. – Bearcat9425
@ Bearcat9425, я не обновляю сама коллекцию tho, я просто обновляю ее элементы, что также можно сделать с помощью свойства getter only –