У меня вопрос о привязке данных WPF. Я хочу изменить цвет фона кнопки со значениями привязки моего ObservableCollection к кнопке

Мой объект:

public string Position1 { get; set; }
public string Position2 { get; set; }
public string Position3 { get; set; }
public string Position4 { get; set; }
public string Position5 { get; set; }
public string Position6 { get; set; }
public string Position7 { get; set; }

Я хотел иметь эти позиции внутри ObservableCollection, как показано ниже:

public ObservableCollection<Positions> Positions { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            Positions = new ObservableCollection<Positions>();

            Positions.Add(new Positions
            {
                Position1 = "Red",
                Position2 = "Red",
                Position3 = "Red",
                Position4 = "Gray",
                Position5 = "Green",
                Position6 = "Green",
                Position7 = "Green",
            });
        }

Теперь мне интересно, как я могу привязать эти значения к кнопке в XAML?

Я пробовал это .

<Button 
        DataContext="Positions[0]"
        Grid.Column="0" 
        Background="{Binding Path=Position1}" 
        x:Name="R1" 
        HorizontalAlignment="Left" 
        Height="100" 
        Margin="5,0,0,0" 
        VerticalAlignment="Top" 
        Width="109" 
        Click="R1_Click">
        <Rectangle Stroke="Black" /> 
    </Button>

Я попытался установить текст данных, но меня очень смущает то, как я могу получить значения внутри списка в XAML. Кто-нибудь знает как это сделать?

0
Brum 22 Окт 2018 в 18:45

2 ответа

Лучший ответ

Похоже, проблема связана с Binding the datacontext, поскольку вы привязываете его как строку, он не может понять, что это свойство в вашей модели представления.

Измените DataContext вашей кнопки на "DataContext =" {Binding Positions [0]} "" Затем решите, какое свойство вы хотите привязать к Фону .

Измените код на ниже,

          <Button 
          DataContext="{Binding Positions[0]}"
          Grid.Column="0" 
          Background="{Binding Path=Position4}" 
          x:Name="R1" 
          HorizontalAlignment="Left" 
          Height="100" 
          Margin="5,0,0,0" 
          VerticalAlignment="Top" 
          Width="109"
          Click="R1_Click">
              <Rectangle Stroke="Black" />
          </Button>

И я надеюсь, что вы применяете DataContext своей модели просмотра к окну в конструкторе окна.

Надеюсь, это поможет, если возникнут другие проблемы, не стесняйтесь возвращаться :)

1
Brum 22 Окт 2018 в 16:34

Чтобы создать несколько кнопок, используйте ItemsControl с ItemsSource, привязанным к вашей коллекции позиций.

Чтобы фактически установить фон каждой кнопки, вам понадобится класс Converter для выполнения этого многоэтапного преобразования - сначала из string в Color (ColorConverter.ConvertFromString()), а затем в SolidColorBrush используя это значение цвета.

-1
Peregrine 22 Окт 2018 в 15:54
52933143