2012-02-27 89 views
3

工作,我已经创建的样本用户控制动态与用户绑定,静态就是在Silverlight和MVVM

RestrictedBox.xaml

<UserControl.Resources> 
     <Converters:EnumToVisibilityConverter x:Key="enumToVisConverter" /> 
     <Converters:EnumToVisibilityConverterReverse x:Key="enumToVisConverterReverse" /> 
    </UserControl.Resources> 
    <Grid x:Name="LayoutRoot" Background="White" Width="Auto"> 
     <StackPanel Margin="0"> 
      <TextBox Text="{Binding Value}" Visibility="{Binding Type,Converter={StaticResource enumToVisConverter}}" BorderBrush="Green" /> 
      <PasswordBox Password="{Binding Value}" Visibility="{Binding Type,Converter={StaticResource enumToVisConverterReverse}}" BorderBrush="Red" /> 
     </StackPanel> 
    </Grid> 

RestrictedBox.xaml.cs器不起作用

public partial class RestrictedBox : UserControl 
    { 
     public RestrictedBox() 
     { 
      InitializeComponent(); 
      //If i bind static value and uncomment following line then it is working. 
      //If i bind static value and comment following line then it is not working 
      this.DataContext = this; 
      //Dynamic binding does not work using this code. 
     } 

     public string Value 
     { 
      get { return (string)GetValue(ValueProperty); } 
      set { SetValue(ValueProperty, value); } 
     } 
     public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(string), typeof(RestrictedBox), new PropertyMetadata("", ValueChanged)); 
     private static void ValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
     } 
     public Mode Type 
     { 
      get { return (Mode)GetValue(TypeProperty); } 
      set { SetValue(TypeProperty, value); } 
     } 
     public static readonly DependencyProperty TypeProperty = DependencyProperty.Register("Type", typeof(Mode), typeof(RestrictedBox), new PropertyMetadata(TypeChanged)); 
     private static void TypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
     } 
    } 

LoginViewModel.cs

public class LoginViewModel : INotifyPropertyChanged, IRegionMemberLifetime 
{ 
     private string _UserName = "Imdadhusen Sunasara"; 
     public string UserName 
     { 
      get { return _UserName; } 
      set 
      { 
       _UserName = value; 
       OnPropertyChanged("UserName"); 
      } 
     } 
} 

LoginView.xaml这下面的行不绑定工作)

<control:RestrictedBox Value="{Binding UserName}" Type="Text" /> 

这是工作与静态结合

<control:RestrictedBox Value="Imdadhusen" Type="Text" /> 

Th anks, Imdadhusen

+0

首先,我看到你有很多的问题,了解什么绑定。例如,没有像“静态绑定”这样的东西。绑定只能是“动态”的。我几乎不可能推荐Mattew McDonald的书“C#中的Pro Silverlight 4” - 只读一次,您将节省大量时间。 – chopikadze 2012-02-27 14:04:45

回答

2

其实它应该工作。您可以请验证下面的控件的父容器的DataContext没有引用viewmodel的任何其他属性。

<control:RestrictedBox Value="Imdadhusen" Type="Text" /> 

例如,像下面的东西。

<StackPanel DataContext={Binding CurrentUser}> 

<control:RestrictedBox Value="{Binding UserName}" 

Type="Text" /> 

</StackPanel> 

可能是这个帮助你....