2011-05-12 14 views
5

Tengo un modelo de vista que hereda de una clase base que tiene una propiedad llamada IsReadOnly. En este modelo de vista, tengo una propiedad llamada Cliente y estoy vinculando las propiedades del objeto del cliente a los controles en mi vista.Propiedades y subpropiedades de enlace MVVM

Sin embargo, también quiero ser capaz de vincular IsReadOnly a cada control en mi vista también.

<TextBox x:Name="FirstNameTextBox" Grid.Column="1" Margin="2,2,0,2" Grid.Row="2" TextWrapping="Wrap" HorizontalAlignment="Left" Width="200" 
         Text="{Binding FirstName, Mode=TwoWay}" IsReadOnly="{Binding MyViewModel.IsReadOnly}"/> 

¿Cómo puedo utilizar ambas propiedades? aquí es mi estructura

public class {MyViewModelBase IsReadOnly public bool {get; set;}}

MyViewModel public class { pública Cliente Cliente {get; conjunto; } }

public class Cliente { public string FamilyName {get; conjunto; } }

Saludos para cualquier ayuda

Respuesta

0

supongo que su MyViewModel hereda de MyViewModelBase.

public class MyViewModelBase { public bool IsReadonly { get;set;} } 

public class MyViewModel : MyViewModelBase { public Customer Customer { get; set; } } 

public class Customer { public string FamilyName { get; set; } } 

yo también asumir que su vista DataContext es una instancia de MyViewModel, si no que me haga saber :) su unión debe ser como la siguiente:

<TextBox x:Name="FirstNameTextBox" Grid.Column="1" Margin="2,2,0,2" Grid.Row="2" TextWrapping="Wrap" HorizontalAlignment="Left" Width="200" 
     Text="{Binding Customer.FamilyName, Mode=TwoWay}" IsReadOnly="{Binding IsReadOnly}"/> 

EDIT: si el DataContext de su cuadro de texto es la propiedad del cliente, tiene que usar RelativeSource en su enlace a IsReadOnly

+0

gracias, eso solucionó mi problema. Es bueno saber que puedes atravesar la propiedad. :) – BBurke

7

la propiedad de atravesar las obras con la unión también, por lo que se puede hacer lo siguiente para obligar a la propiedad IsReadOnly del objeto de base:

public class MyViewModel { 
    public Customer Customer { get; set; } 
} 

public class Customer : Entity { 
} 

public class Entity { 
    public bool IsReadonly { get;set;} 
} 

<Button IsEnabled="{Binding Customer.IsReadonly}" /> 

Para el ejemplo anterior, Supongo que su vista está vinculada a una instancia de "MyViewModel" y es probable que ya tenga un cambio de notificación de propiedad en sus propiedades.

+0

Hola Hadi, veo lo que dice. Por lo tanto, uniré a mi Cliente al DataContext de una Grilla y dentro de la Grilla tengo TextBoxes vinculados a las propiedades del Cliente. Pero también quiero vincular la propiedad IsEditable, IsReadOnly a viewModel IsReadOnly. ¿Es posible? – BBurke

Cuestiones relacionadas