2011-05-12 25 views
5

IsReadOnly adında bir özelliğe sahip bir taban sınıfından miras kalan bir görünüm modelim var. Bu görünüm modelinde, Müşteri adında bir özelliğe sahibim ve müşteri nesnesinin özelliklerini, görünümümdeki denetimlere bağladım.MVVM bağlama özellikleri ve altpropiler

Ayrıca, IsReadOnly yöntemini her görünümde de görmek istiyorum.

<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}"/> 

Bu iki özelliği kullanmaktan nasıl yararlanabilirim? burada yapıdır

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

public class MyViewModel { kamu Müşteri Müşteri {get; set; } }

genel konuk Müşteri { genel dizede FamilyName {get; set; } } Herhangi bir yardım için

Alkış

Mülkiyet çok Bağlama ile çalışmalarını kateden, bu nedenle baz nesnesinin IsReadOnly özelliğine bağlamak için aşağıdakileri yapabilirsiniz

cevap

0

MyViewModel'inizin MyViewModelBase'den miras aldığını varsayalım.

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; } } 
ben de değil bana bildirin, sizin bakış DataContext MyViewModel örneğidir olduğunu varsayalım

:) senin şu gibi olmalıdır bağlayıcı:

<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: senin TextBox DataContext eğer Müşteri Mülkiyeti, Bağlantınızda RelativeSource'ı kullanmanız gerekiyor IsReadOnly

+0

teşekkürler, bu benim sorunumu çözdü. Mülkiyet Traversing yapabileceğini bilmek güzel. :) – BBurke

7

: Yukarıdaki Örneğin

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}" /> 

, Görünümünüzün "MyViewModel" örneğine bağlı olduğunu varsayalım ve muhtemelen mülkünüzde zaten mülk bildiriminde değişiklik var demektir.

+0

Merhaba, Ne söylediğini görüyorum. Bu yüzden Müşterimi bir Grid'in DataContext'ına bağlarım ve Grid'in içinde Müşteri özelliklerine bağlı TextBox'lar var. Ama ben de IsEditable, IsReadOnly viewModel IsReadOnly özelliğine bağlamak istiyorum. Mümkün mü? – BBurke