没有XAML的绑定[WPF]

时间:2016-05-15 00:05:04

标签: c# wpf xaml binding

我正在设计一个内置256个按钮的应用程序,我使用for循环将它们添加到C#代码的WrapPanel中。 XAML代码中未提及这些按钮。 我的问题是,当点击其中一个时,我必须使用绑定来改变它的颜色。 我尝试了下面的代码,但它不起作用(只更改了按钮的内容):

        private void NewButton_Click(object sender, RoutedEventArgs e)
    {
        Button btn = (Button)sender;

        for (int i = 0; i < counter; i++)
        {
            if (btn.Name == ("Butt" + i))
            {
                btn.Content = "works";
                MyData mydata = new MyData();
                Binding binding = new Binding("Color");
                binding.Source = mydata;
                binding.Source = btn;
                break;
            }
        }
    }

        private int counter = 0;
    public class MyData
    {
        public static Brush _Color = Brushes.Red;
        public Brush Color
        {
            get
            {
                return _Color;
            }
        }
    }
    public MainWindow()
    {

        InitializeComponent();

        int num = number(3);
        List<Button> btnList = new List<Button>();
        for(int i =0; i<(num*num); i++)
        {

            Button button = new Button();

            button.Name = "Butt" + counter;

            button.Content = "New";

            counter++;
            button.Height = 35;
            button.Width = 35;
            button.Click += new RoutedEventHandler(NewButton_Click);
            wp.Children.Add(button);

        }

1 个答案:

答案 0 :(得分:1)

如果你要做的是将按钮的背景颜色绑定到你的&#34; MyData&#34;类对象,你几乎就在那里......

首先,创建绑定对象,将源设置为&#34; mydata&#34;的新实例,然后指向&#34; Color&#34;的路径。财产暴露。

然后,您需要将新的BINDING对象保存到按钮控件,并告诉它您希望BackgroundProperty绑定到新创建的绑定。对您的代码进行以下微调。并不完全是为什么你的方法对你的整个项目来说是什么,但希望能达到你的目的。

            if (btn.Name == ("Butt" + i))
            {
                btn.Content = "works";
                MyData mydata = new MyData();
                var oBind = new Binding
                {
                    // bind its source to this view model instance
                    Source = mydata,
                    // what property on THE BUTTON do want to be bound to.
                    Path = new PropertyPath("Color")
                };

                btn.SetBinding(BackgroundProperty, oBind);
                btn.DataContext = oBind;
                break;
            }