silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight UserControl自定义属性绑定大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在Silverlight UserControls中实现自定义属性的正确方法是什么? Silverlight中的每个“Page”在技术上都是一个UserControl(它们来源于UserControl类)。当我在这里说UserControl时,我的意思是在许多不同的场景(类似于ASP.NET UserControl)的许多不同页面中使用的Custom UserControl。 我希望Custom
在Silverlight UserControls中实现自定义属性的正确方法是什么?

Silverlight中的每个“Page”在技术上都是一个UserControl(它们来源于UserControl类)。当我在这里说UserControl时,我的意思是在许多不同的场景(类似于ASP.NET UserControl)的许多不同页面中使用的Custom UserControl。

我希望Custom UserControl支持绑定,而不是依赖它所绑定的属性名称,始终是相同的。相反,我希望UserControl本身具有UserControl中的Controls控件绑定的属性,UserControl之外的viewmodel也绑定到。 (请参见下面的例子)

在UserControl中的绑定工作,MainPage中的绑定工作,我在MainPage和UserControl之间建立的绑定不起作用。具体如下:

<myUserControls:MyCustomUserControl x:Name="MyCustomcatontrol2" 
    SELEctedText="{Binding MainPageSELEctedText,Mode=TwoWay}" 
    Width="200" Height="50" />

示例@L_607_11@:

@H_709_19@mainPage.xaml中

<UserControl x:Class="SilverLightcustomUserControl.MainPage"
    xmlns="http://scheR_650_11845@as.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://scheR_650_11845@as.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://scheR_650_11845@as.microsoft.com/expression/blend/2008"
    xmlns:mc="http://scheR_650_11845@as.openxmlformats.org/markup-compatibility/2006" 
    xmlns:myUserControls="clr-namespace:SilverLightcustomUserControl"
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"
    DataCo@R_801_10443@t="{Binding Relativesource={Relativesource Self}}">
  <Canvas x:Name="LayoutRoot">
    <StackPanel Orientation="Vertical">
      <TextBlock Text="UserControl Binding:" Width="200"></TextBlock>
      <myUserControls:MyCustomUserControl x:Name="MyCustomcatontrol2" SELEctedText="{Binding MainPageSELEctedText,Mode=TwoWay}" Width="200" Height="50" />
      <TextBlock Text="MainPage Binding:" Width="200"></TextBlock>
      <TextBox Text="{Binding MainPageSELEctedText,Mode=TwoWay}" Width="200"></TextBox>
      <Border BorderBrush="Black" BorderThickness="1">
        <TextBlock Text="{Binding MainPageSELEctedText}" Width="200" Height="24"></TextBlock>
      </Border>
    </StackPanel>
  </Canvas>
</UserControl>
@H_709_19@mainPage.xaml.cs中

namespace SilverLightcustomUserControl
{
 public partial class MainPage : UserControl,INotifyPropertyChanged
 {
  //NOTE: would probably be in a viewmodel
  public String MainPageSELEctedText
  {
   get { return _MainPageSELEctedText; }
   set
   {
    String myValue = value ?? String.Empty;
    if (_MainPageSELEctedText != myvalue)
    {
     _MainPageSELEctedText = value;
     OnPropertyChanged("MainPageSELEctedText");
    }
   }
  }
  private String _MainPageSELEctedText;


  public MainPage()
  {
   InitializeComponent();
  }


  #region INotifyPropertyChanged Members

  public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void OnPropertyChanged(String Name)
  {
   PropertyChangedEventHandler ph = this.PropertyChanged;

   if (ph != null)
    ph(this,new PropertyChangedEventArgs(Name));
  }

  #endregion
 }
}
@H_709_19@myCustomUserControl.xaml

<UserControl
   x:Class="SilverLightcustomUserControl.MyCustomUserControl" 
   xmlns="http://scheR_650_11845@as.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x="http://scheR_650_11845@as.microsoft.com/winfx/2006/xaml"
   xmlns:d="http://scheR_650_11845@as.microsoft.com/expression/blend/2008"
   xmlns:mc="http://scheR_650_11845@as.openxmlformats.org/markup-compatibility/2006"
   DataCo@R_801_10443@t="{Binding Relativesource={Relativesource Self}}">
  <Grid>
    <StackPanel>
      <TextBox Text="{Binding SELEctedText,Mode=TwoWay}" />
      <Border BorderBrush="Black" BorderThickness="1">
        <TextBlock Text="{Binding SELEctedText}" Height="24"></TextBlock>
      </Border>
    </StackPanel>
  </Grid>
</UserControl>
@H_709_19@myCustomUserControl.xaml.cs

namespace SilverLightcustomUserControl
{
 public partial class MyCustomUserControl : UserControl
 {
  public String SELEctedText
  {
   get { return (String)GetValue(SELEctedTextProperty); }
   set { SETVALue(SELEctedTextProperty,value); }
  }

  public static readonly DependencyProperty SELEctedTextProperty =
    DependencyProperty.Register("SELEctedText",typeof(String),typeof(MyCustomUserControl),new PropertyMetadata("",SELEctedText_PropertyChangedCallBACk));


  public MyCustomUserControl()
  {
   InitializeComponent();
  }

  private static void SELEctedText_PropertyChangedCallBACk(DependencyObject d,DependencyPropertyChangedEventArgs E)
  {
   //empty
  }
 }
}

(我怎么这么远):

使用DependencyPropertys:
http://geekswithblogs.net/thibbard/archive/2008/04/22/wpf-custom-control-dependency-property-gotcha.aspx

使用DependencyPropertys,将x:Name添加到UserControl中 – 使用ElementName添加绑定,再次在PropertyChangedCallBACk方法中设置Custom属性
Setting Custom Properties in UserControl via DataBinding

不要使用自定义属性,依赖于底层数据标签名(我不喜欢这个解决方案):
wpf trouble using dependency properties in a UserControl

@L_262_28@

我理解它是因为您的控件没有从maim页面接收到新值,因为您正在设置控件的DataCo@R_801_10443@t。如果没有,那么控件的DataCo@R_801_10443@t将从它的父代继承,这种情况下的主页面

为了让它工作,我删除你的控件的DataCo@R_801_10443@t设置,为每个控件添加一个x:Name,并使用[name] .SetBinding方法在控件的构造函数中设置绑定。

我在ctor中执行了绑定,因为我无法找出一种将xaml中的声明绑定的source属性设置为Self的方法。即{Binding SELEctedText,Mode = TwoWay,source = [Self here some how]}。我没有尝试使用Relativesource = {Relativesource Self}而没有喜悦。

注意:这一切都是SL3。

大佬总结

以上是大佬教程为你收集整理的Silverlight UserControl自定义属性绑定全部内容,希望文章能够帮你解决Silverlight UserControl自定义属性绑定所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。