【问题标题】:MVVM binding properties and subpropertiesMVVM 绑定属性和子属性
【发布时间】:2011-08-23 20:42:14
【问题描述】:

我有一个从基类继承的视图模型,该基类具有名为 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}"/>

如何才能同时使用这两个属性? 这是我的结构

公共类 MyViewModelBase { 公共布尔 IsReadonly { 获取;设置;} }

公共类 MyViewModel { 公共客户客户{得到;放; } }

公共类客户{ 公共字符串 FamilyName { 获取;放; } }

为任何帮助干杯

【问题讨论】:

    标签: wpf silverlight mvvm binding


    【解决方案1】:

    属性遍历也适用于 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”的实例,并且您的属性可能已经有属性通知更改。

    【讨论】:

    • 嗨哈迪,我明白你在说什么。所以我将我的客户绑定到网格的 DataContext 并且在网格内部我有绑定到客户属性的文本框。但我也想将 IsEditable、IsReadOnly 绑定到 viewModel IsReadOnly 属性。有可能吗?
    【解决方案2】:

    我假设您的 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 是客户属性,您必须在绑定到 IsReadOnly 时使用 RelativeSource

    【讨论】:

    • 谢谢,这解决了我的问题。很高兴知道您可以进行属性遍历。 :)
    猜你喜欢
    • 2011-08-26
    • 2014-04-10
    • 2017-11-10
    • 2020-04-19
    • 2014-05-14
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多