@iXelper

Как взаимодействовать с элементом внутри DataTemplate?

Есть DataGrid, у него есть столбец с Ellipse для визуального удобства)
Собственно сам вопрос, как поменять цвет Ellipse для выбранной ячейки?

<DataGrid x:Name="infoDG"
                 Background="Gray"
                 AutoGenerateColumns="False"
                 CanUserAddRows="False">
        <DataGrid.Columns>
                    
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Ellipse x:Name="checkIdEll"
                                         Fill="Green"
                                         Width="10"
                                         Height="10"
                                         VerticalAlignment="Center"
                                         HorizontalAlignment="Center">
                                </Ellipse>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                  
      </DataGrid.Columns>
</DataGrid>
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
Casper-SC
@Casper-SC
.NET программист
Можно ещё сделать свой UserControl, в который поместить Ellipse и всю логику модификации его внешнего вида в XAML. Но нужно ли оно? Думаю, нет. Способов много это сделать.

<DataGrid
    AutoGenerateColumns="False"
    ItemsSource="{Binding Income}">
    <DataGrid.Columns>
        <DataGridTemplateColumn
            CanUserReorder="False"
            CanUserResize="False"
            CanUserSort="False"
            IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate DataType="viewModels:IncomeViewModel">
                    <Ellipse Fill="{Binding IsModified, Converter={StaticResource BooleanToBrushConverter}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
</DataGrid>


using GalaSoft.MvvmLight;

namespace WpfApp.ViewModels
{
    public class IncomeViewModel : ViewModelBase
    {
        private bool _isModified;

        public bool IsModified
        {
            get { return _isModified; }
            set { Set(ref _isModified, value); }
        }
    }
}


using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;

namespace WpfApp.Converters
{
    [ValueConversion(typeof(bool), typeof(SolidColorBrush))]
    public class BooleanToBrushConverter : IValueConverter
    {
        public SolidColorBrush TrueBrush { get; set; } = new SolidColorBrush(Colors.Tomato);

        public SolidColorBrush FalseBrush { get; set; } = new SolidColorBrush(Colors.CornflowerBlue);

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool)value ? TrueBrush : FalseBrush;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Binding.DoNothing;
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы