ItemsControl не обновляет привязку ItemsSource - PullRequest
0 голосов
/ 26 октября 2018

У меня ObservableCollection<string>, привязанный к ItemsControl как ItemsSource, привязка отлично работает от ВМ до View, но если я изменю содержимое привязки в TextBox, она не будет обновлятьObservableCollection что связано.

Я не могу понять почему, кто-нибудь знает, почему это так?

Вот мой код:

<ItemsControl ItemsSource="{Binding Metrics, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Grid.Column="1" Grid.Row="1" Margin="0, 20, 0, 0">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <WrapPanel Orientation="Horizontal">
                <TextBox Name="CalibrationNameTB"  Grid.Column="1" Text="{Binding ., UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Style="{StaticResource baseStyle}" Margin="0, 1" Padding="5, 1" Width="270" FontSize="12"/>
            </WrapPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl" >
            <StackPanel Orientation="Horizontal" >
                <ItemsPresenter />
            </StackPanel>
        </ControlTemplate>
    </ItemsControl.Template>
</ItemsControl>

1 Ответ

0 голосов
/ 26 октября 2018

Вы не можете обновить string, потому что он неизменен.

Что вам нужно сделать, это заменить ObservableCollection<string> на ObservableCollection<YourType>, где YourType - это класс с открытым свойством string, которое вы можете получить или установить:

class YourType : INotifyPropertyChanged
{
    private string _theString;
    public string TheString
    {
        get { return _theString; }
        set { _theString = value; NotifyPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Затем вы привязываете это свойство в разметке XAML:

<WrapPanel Orientation="Horizontal">
    <TextBox Name="CalibrationNameTB"  Grid.Column="1" Text="{Binding TheString, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource baseStyle}" Margin="0, 1" Padding="5, 1" Width="270" FontSize="12"/>
</WrapPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...