У меня есть ListView в WPF с текстом и цветными прямоугольниками. Дополнительно имеется текстовое поле и прямоугольник с привязкой к ListView. Выбранный элемент списка отображается в текстовом поле и прямоугольнике:
<ListView x:Name="StatusOEMList" HorizontalAlignment="Left" Height="195" Margin="50,50,0,0" VerticalAlignment="Top" Width="255" ItemsSource="{Binding OEM}" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="Status" DisplayMemberBinding="{Binding value}" />
<GridViewColumn Header="Farbe">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Rectangle Width="10" Height="10" Fill="{Binding color, Converter={StaticResource ColorToBrushConverter}}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<TextBox HorizontalAlignment="Left" Height="23" Margin="50,272,0,0" TextWrapping="Wrap" Text="{Binding ElementName=StatusOEMList, Path=SelectedItem.value}" VerticalAlignment="Top" Width="120"/>
<Rectangle Fill="{Binding ElementName=StatusOEMList, Path=SelectedItem.color, Converter={StaticResource ColorToBrushConverter}}" HorizontalAlignment="Left" Height="23" Margin="192,272,0,0" Stroke="Black" VerticalAlignment="Top" Width="23" MouseLeftButtonDown="rectangle_MouseLeftButtonDown" Cursor="Pen"/>
Когда я изменяю текст, изменение передается обратно в ListView. Приятно. Но как я могу изменить цвет прямоугольника и перенести изменение обратно в ListView? Я реализовал ColorPicker для изменения цвета прямоугольника:
void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ColorDialog colorDialog = new ColorDialog();
colorDialog.SelectedColor = ((SolidColorBrush)((Rectangle)sender).Fill).Color;
colorDialog.Owner = this;
if ((bool)colorDialog.ShowDialog())
{
((Rectangle)sender).Fill = new SolidColorBrush(colorDialog.SelectedColor);
}
}
Я думаю, что я перезаписываю Binding в Rectangle.Fill там. Как я могу просто изменить цвет и сохранить привязку?