我有一个视图模型,它继承自一个名为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}"/>
我如何使用这两个属性? 这是我的结构
public class MyViewModelBase { public bool IsReadonly {get; set;} }
公共类MyViewModel { 公共客户客户{get;组; } }
公共类客户{ public string FamilyName {get;组; } }
为任何帮助干杯
答案 0 :(得分: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}" />
对于上面的示例,我假设您的视图绑定到“MyViewModel”的实例,并且您可能已经在属性上更改了属性通知。
答案 1 :(得分: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是Customer属性,则必须在绑定到IsReadOnly中使用RelativeSource