MVVM绑定属性和子属性

BBu*_*rke 5 silverlight wpf binding mvvm

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

但是我也希望能够将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}"/>
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用这两个属性?这是我的结构

公共类MyViewModelBase {public bool IsReadonly {get; set;}}

公共类MyViewModel {public Customer Customer {get; 组; }}

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

欢呼任何帮助

Had*_*ari 7

属性遍历也适用于Binding,因此您可以执行以下操作以绑定到基础对象的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}" />
Run Code Online (Sandbox Code Playgroud)

对于上面的示例,我假设您的视图绑定到"MyViewModel"的实例,并且您可能已经在属性上更改了属性通知.


bli*_*eis 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; } }
Run Code Online (Sandbox Code Playgroud)

我还假设您的视图 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}"/>
Run Code Online (Sandbox Code Playgroud)

编辑:如果 TextBox 的 DataContext 是 Customer 属性,则必须在 IsReadOnly 的绑定中使用relativesource