WPF Button的属性 Content绑定字符串失败

来源:互联网 发布:电脑管家 激活windows 编辑:程序博客网 时间:2024/05/22 10:40

对于button的使用一般都不会涉及需要将content属性做绑定数据的操作。所以在网上也找到的有关资料也比较少。

现在我有一种需要,一个按钮显示的Content是根据绑定的字符串来的。

最开始我的做法是

 <Grid x:Name="grid">        <Button x:Name="button" Width="100" Height="30"  Content="{Binding Text}" Click="Button_Click"></Button>    </Grid>
这个Text就是一个public string Text="xxxxx";

很显然没有起任何作用;

改进版的

        private string _Text;        public string Text        {            get { return _Text; }            set { _Text = value; }        }

依然不起作用,然后在网上找到的一些资料发现,Content不是string类型,而是object类型,不能直接绑定字符串;

接下来的做法是新建一个类,绑定一个类中的数据

 public class ButBindingData         {            public ModelButBindingData()            {                Text = "列表模式";            }            private string _Text ;            public string Text            {                get { return _Text; }                set { _Text = value; }            }        }
依然无效,于是我在代码里手动写上了绑定
 Binding binding = new Binding();            binding.Source = data;            binding.Path = new PropertyPath("Text");            button.SetBinding(Button.ContentProperty, binding);
我发现,手动设置这样的绑定是起作用的,那么为什么在xmal里设置不起作用呢。

左思右想,找了许多资料,发现了被我遗漏的最重要的一点,上下文属性未设置,那当然找不到要绑定的数据啊

所以最关键的一点是

grid.DataContext = data;

那么xmal里就可以这样写了

  <Grid x:Name="grid">        <Button x:Name="button" Width="100" Height="30"  Content="{Binding Text}" Click="Button_Click"></Button>    </Grid>
正确显示!

为了达到数据及时更新的目的,还需要一些操作:

public class PropertyChangedBase : INotifyPropertyChanged        {            public event PropertyChangedEventHandler PropertyChanged;            public void Notify(string propertyName)            {                if (PropertyChanged != null)                {                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));                }            }        }        public class ModelButBindingData : PropertyChangedBase        {            public ModelButBindingData()            {                Text = "666";            }            private string _Text ;            public string Text            {                get { return _Text; }                set { _Text = value; Notify("Text"); }            }        }
就是Text这个数据有变更是会及时通知UI主界面更新显示数据。

当然别忘了数据要

public ModelButBindingData data = new ModelButBindingData();

public属性,还要new出来。

以上就是实现Button的Content绑定数据的操作。






原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 a2奶粉吃了便秘怎么办 两个月宝宝两天没有大便怎么办 婴儿一直拉肚子吃药也不好怎么办 吃奶粉的婴儿便秘怎么办 一个多月小狗便便不成形怎么办 3个月宝宝不拉屎怎么办 好几天不拉大便怎么办 20个月宝宝大便干燥怎么办 两月宝宝三天没大便怎么办 六个月宝宝大便干燥怎么办 五个月宝宝拉肚子怎么办拉水样 2个月婴儿拉稀水怎么办 两个月的宝宝拉肚子怎么办 两天了不拉大便怎么办 25天的宝宝便秘怎么办 2个月宝宝便秘怎么办 猫拉绿色稀水怎么办 50天的宝宝便秘怎么办 人工喂养大便次数少怎么办 4个月宝宝肠炎怎么办? 三个月的宝宝拉肚子有奶瓣怎么办 吃米粉后不拉屎怎么办 宝宝拉绿色稀水怎么办 3个月宝宝肠胃炎怎么办 两个月婴儿拉水怎么办 3个月宝宝拉绿水怎么办 宝宝拉绿色的水怎么办 宝宝大便绿又水怎么办 8个月婴儿便秘怎么办 2个月婴儿便秘怎么办 四个月宝宝拉稀带有泡沫怎么办 六个月宝宝拉肚子怎么办拉水 婴儿拉的是沫怎么办 婴儿拉泡沫屎是怎么办 宝宝吃奶粉上火大便干燥怎么办 没满月的宝宝拉肚子怎么办 婴儿吃奶粉上火不大便怎么办 四个月宝宝拉沫怎么办 4个月小孩拉肚子怎么办 3个月的宝宝拉稀怎么办 宝宝没喝过奶粉怎么办