2011-05-12 221 views
5

我有一个视图模型,它继承自一个名为IsReadOnly属性的基类。 在这个视图模型中,我有一个名为Customer的属性,我将客户对象的属性绑定到我的视图上的控件。MVVM绑定属性和子属性

但是我也希望能够将IsReadOnly绑定到我的视图上的每个控件。

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

我该如何去使用这两个属性? 这里是我的结构

公共类MyViewModelBase { 公共BOOL IsReadonly {获得;设置;}}

公共类MyViewModel { 公众客户客户{获得;组; } }

公共类客户{ public string FamilyName {get;组; } }

干杯任何帮助

回答

0

我假设你的MyViewModel继承自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; } } 

我也认为你的观点的DataContext是MyViewModel的一个实例,如果不是让我知道:)你的结合应该是这样的:

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

编辑:如果你的TextBox的DataContext的是客户财产,你必须使用RelativeSource绑定到IsReadOnly

+0

谢谢,这解决了我的问题。很高兴知道你可以做房产遍历。 :) – BBurke 2011-05-12 12:47:50

7

物业穿越工程与绑定,所以你可以做以下绑定到基本对象的IsReadOnly属性:

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

对于上面的例子,我假设你的视图绑定到“MyViewModel”的实例,并且你的属性可能已经有属性通知的改变。

+0

嗨哈迪,我明白你的意思了。所以我将我的客户绑定到一个Grid的DataContext,并且在Grid中我有TextBoxes绑定到Customer属性。但我也想将IsEditable,IsReadOnly绑定到viewModel的IsReadOnly属性。可能吗? – BBurke 2011-05-12 08:55:50