У меня вопрос о привязке данных 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 ответа
Похоже, проблема связана с 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 своей модели просмотра к окну в конструкторе окна.
Надеюсь, это поможет, если возникнут другие проблемы, не стесняйтесь возвращаться :)
Чтобы создать несколько кнопок, используйте ItemsControl
с ItemsSource, привязанным к вашей коллекции позиций.
Чтобы фактически установить фон каждой кнопки, вам понадобится класс Converter для выполнения этого многоэтапного преобразования - сначала из string
в Color
(ColorConverter.ConvertFromString()
), а затем в SolidColorBrush
используя это значение цвета.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.