Как изменить цвет прямоугольника с привязкой - PullRequest
0 голосов
/ 23 октября 2019

У меня есть 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 там. Как я могу просто изменить цвет и сохранить привязку?

1 Ответ

1 голос
/ 23 октября 2019

Вы действительно перезаписываете Rectangle. Заполните привязку локальным значением. Попробуйте вместо этого изменить связанное свойство:

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())
    {
        var vm = StatusOEMList.SelectedItem as MyViewModel;
        vm.color = colorDialog.SelectedColor;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...