1、新手比较容易犯的错误
新手为了简单按照网上的说法直接这样
<Label Grid.Row="1" Name="linkLable" Content="{Binding Path=LinkString}" HorizontalAlignment="Center" VerticalAlignment="Center" ></Label>
public partial class MainWindow : Window
{
string LinkString {
get ;
set ;
}
public MainWindow()
{
InitializeComponent();
LinkString = "hehe";
linkLable.DataContext = this;
return;
}}
结果死活不起作用。查询网上:MainWindow 实现了INotifyPropertyChanged 接口还是不起作用。
其实是要实现:LinkStringProperty
string LinkString {
get { return (string)GetValue(LinkStringProperty); }
set { SetValue(LinkStringProperty, value); }
}
public static readonly DependencyProperty LinkStringProperty = DependencyProperty.Register("LinkString", typeof(string), typeof(MainWindow));
2、简单绑定代码
binding.Source = ListTest_;
binding.Path = new PropertyPath("LinkString");
binding.Converter = new TestContentConverter();
BindingOperations.SetBinding(this.lab, Label.ContentProperty, binding);
3、多参数绑定
有的时候,一个控件显示的内容需要多个参数来绑定,代码如下:
<Label Grid.Row="1" Name="linkLable" HorizontalAlignment="Center" VerticalAlignment="Center" >
<!--<Label.Content>
<MultiBinding Converter="{StaticResource LinkMultiValueConverter}">
<Binding Path="FirstName" />
<Binding Path="Surname" />
</MultiBinding>
</Label.Content>-->
</Label>
class PosDataSource : INotifyPropertyChanged
{
bool linkParamOk;
public bool LinkParamOk {
get
{
return linkParamOk;
}
set
{
if (linkParamOk != value)
{
linkParamOk = value;
OnPropertyChanged("LinkParamOk");
}
}
}
bool linkPosOk;
public bool LinkPosOk
{
get
{
return linkPosOk;
}
set
{
if (linkPosOk != value)
{
linkPosOk = value;
OnPropertyChanged("LinkPosOk");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class LinkOkMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return String.Format("参数服务连接{0} 位置服务连接{1}", values[0], values[1]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public partial class MainWindow : Window
{
PosDataSource pPosData = new PosDataSource();
PosDataClientImp posClient;
PosSetSever.PositionSet.PositionSetClient client;
Channel channel;
List<Tuple<string, int, int>> listStation = new List<Tuple<string, int, int>>();
private void Button_Click_1(object sender, RoutedEventArgs e)
{
pPosData.LinkParamOk = true;
}
public MainWindow()
{
InitializeComponent();
//Binding binding = new Binding();
//binding.Source = this;
//binding.Path = new PropertyPath("LinkString");
//BindingOperations.SetBinding(this.PosShowLable, Label.ContentProperty, binding);
MultiBinding mb = new MultiBinding();
{
Binding bd = new Binding();
bd.Source = pPosData;
bd.Path = new PropertyPath("LinkParamOk");
mb.Bindings.Add(bd);
}
{
Binding bd = new Binding();
bd.Source = pPosData;
bd.Path = new PropertyPath("LinkPosOk");
mb.Bindings.Add(bd);
}
mb.Converter = new LinkOkMultiValueConverter() ;
BindingOperations.SetBinding(this.linkLable, Label.ContentProperty, mb);
return;}