WPF привязывает цвет фона к кнопке с наблюдаемой коллекцией - PullRequest
0 голосов
/ 22 октября 2018

У меня есть вопрос по поводу привязки данных 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.Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

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

Измените 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 вашей модели представления для окна в конструкторе окна.

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

0 голосов
/ 22 октября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...