Есть TextBox в Control Template ListBoxItem
<TextBox Grid.Column="2" Grid.Row="0" Text="{Binding (extensions:DetectorExtension.Data), RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" FontFamily="Arial" FontSize="16" Foreground="Black" SnapsToDevicePixels="True" Background="White" BorderBrush="Black" BorderThickness="0"/> // выше xmlns:extensions="clr-namespace:Test.Extensions"
и его Text биндится к Attached Property
public static readonly DependencyProperty DataProperty =
DependencyProperty.RegisterAttached("Data", typeof(string),
typeof(DetectorExtension), new PropertyMetadata(null));
public static string GetData(DependencyObject obj)
=> (string)obj.GetValue(DataProperty);
public static void SetData(DependencyObject obj, string value)
=> obj.SetValue(DataProperty, value);
ListBox:
<ListBox Grid.Column="0" Grid.Row="1" SelectionMode="Extended" ItemsSource="{Binding DetectorsViewModel}">
<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template" Value="{DynamicResource DetectorControlTemplate}"/>
<Setter Property="extensions:DetectorExtension.Name" Value="{Binding Name}"/>
<Setter Property="extensions:DetectorExtension.Data" Value="{Binding Data}"/>
</Style>
</ListBox.Resources>
</ListBox>
DetectorsViewModel:
private ObservableCollection<DetectorViewModel> detectorsViewModel;
public ObservableCollection<DetectorViewModel> DetectorsViewModel {
get => this.detectorsViewModel;
set => this.detectorsViewModel = value;
}
и Data в DetectorViewModel:
protected string data;
public string Data {
get => this.data;
set => SetProperty(ref this.data, value);
}
Биндинг работает и string показываеться в Text, и если изменять его програмно все тоже нормально, но если езменять в программе TextBox то данные не изменяються в View Model, ничего не происходит
По умолчанию, свойства зависимости используют одностороннюю привязку, поэтому надо или явно создавать свойство сразу с двухсторонней привязкой:
public static readonly DependencyProperty DataProperty =
DependencyProperty.RegisterAttached("Data", typeof(string), typeof(DetectorExtension),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
Или указывать эту двухстороннюю привязку в свойстве:
<TextBox Text="{Binding (extensions:DetectorExtension.Data), Mode=TwoWay,
RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" ...
Первый способ в данном случае предпочтительнее.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Как можно биндить события подобно биндингу Command? Например double click можно забиндить таким образом чтобы в View Model узнать на что был собственно...
Допустим есть массив данных, произошла какая-то математическая операция над этими байтами и нам надо сохранить результат в в другой массив,...
По задумке, получаем ссылку на фото, переносим его в папку с ресурсами, и вставляем фото в качестве заливки для EllipseОшибка:
Изучаю контейнеры, а именно AutofacВ моем примере у меня есть данные datatable, есть контейнер и два класса, реализующие один интерфейс, по логике...