C#学习问题记录

来源:互联网 发布:javascript 反转义 编辑:程序博客网 时间:2024/06/06 18:00

2016-06-30

1,练习ASP.NET,创建了web应用项目后,在设计视图里,不能拖动工具箱里的组件到设计视图里。

      解决方式:放置项目的目录里有个#符号。把#号去掉就好了。


2016-09-11

1,问题:自定义的类作为数据源,为什么在xaml里使用binding,UI却没有显示?

      详细描述:自定义了一个类,并实现INotifyPropertyChanged接口

public class Student : INotifyPropertyChanged{    public event PropertyChangedEventHandler PropertyChanged;    private string name;    public string Name    {        get { return name; }        set        {            name = value;            if(this.PropertyChanged != null)            {                this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(Name));            }        }    }}

要把Name属性Binding到TextBox,在C#后台中写

public partial class MainWindow : Window{    public Student stu;    public MainWindow()    {        InitializeComponent();     stu = new Student();     stu.Name = "xiaoming";        Binding bd = new Binding("Name"){Source=stu};        BindingOperations.SetBinding(this.txtBox, TextBox.TextPorperty, bd);    }}

运行没有问题。但是把binding写在xaml文件中的时候:

<TextBox x:Name="txtBox" Text="{Binding stu.Name}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" Margin="5" />
TextBox上却没有显示出"xiaoming"字符。

    解决方法:在MainWinidow()中,需要添加DataContext=this语句:

public MainWindow(){  InitializeComponent();  stu = new Student();  stu.Name = "xiaoming";   DataContext = this;}

2,问题:在xaml中将一个TextBox的Text属性Binding到另一个TextBox上,运行之后,两个TextBox的内容没有同时变化。

      代码:

<TextBox x:Name="textBox1" Text="{Binding Path=Text, Source=textBox2}" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1" Margin="5" />

     解决方法:不是使用Source而是使用ElementName。ElementName是用于将一个UI控件作为另一个UI空间的Binding源的时候用的。可以参考这个文章:点击打开链接

3,问题:自定义的类中有一个数组,这个数组作为ComboBox的数据源,在后台代码中使用这样的语句,运行后能看到ComboBox内容变化

Binding bd = new Binding("PortNames") { Source = MyPort };BindingOperations.SetBinding(this.cmbPortNum, ComboBox.ItemsSourceProperty, bd);
但在xaml中这样写,运行后ComboBox内容却没有变化

<ComboBox Name="cmbPortNum" ItemsSource="{Binding MyPort.PortNames}" Margin="2"/>

    解决方法:这个自定义实例化之后需要给它get和set方法。还需要使用DataContext=this语句。

public partial class MainWindow : Window{    public SerialPortModel MyPort{ get; set; }    public MainWindow()    {        InitializeComponent();        MyPort = new SerialPortModel();        MyPort.PortNames = SerialPort.GetPortNames();        DataContext = this;    }}

2016-10-14

为已有的项目添加测试。

使用NUnit。

右击解决方案,选择添加测试项目。在新添加的测试项目里,右击“引用”,把要被测的项目引用添加进来。如果测试项目和被测项目的.net版本不同,则在项目→属性里,把二者的.net版本修改一致。

0 0