WPF将背景色绑定到具有可观察集合的按钮

时间:2018-10-22 15:45:35

标签: c# wpf xaml data-binding

我对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>

我试图设置datacontext,但是我对如何在XAML中获取列表中的值感到非常困惑。有谁知道该怎么做?

2 个答案:

答案 0 :(得分:1)

绑定数据上下文似乎是问题所在,因为您将其绑定为字符串,所以无法理解它是视图模型中的一个属性。

将按钮的DataContext更改为“ DataContext =” {绑定位置[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>

我希望您对窗口的构造函数中的窗口执行viewmodel的DataContext。

希望这会有所帮助,如果还有其他问题,请随时回来:)

答案 1 :(得分:-1)

要生成多个按钮,请使用ItemsControl,并将ItemsSource绑定到您的位置集合。

要实际设置每个按钮的背景,您需要一个IConverter类来进行此多步转换-首先从stringColorColorConverter.ConvertFromString()),然后再到{{ 1}}使用此颜色值。