如何使用MVVM Light访问WPF中的模型属性

时间:2012-12-11 17:16:09

标签: c# .net wpf mvvm

我是MVVM和WPF的新手,所以这可能是一个广泛或愚蠢的问题,但是:

我正在使用MVVM模式并拥有1个Viewmodel,几个视图和几个模型。 所有视图都只是Usercontrols,它放在我的mainwindow.xaml上。

有问题的视图绑定到具有多个属性的模型,其中一个我想用来动态更改用户控件中的图片。

我正在尝试访问此属性非常困难,我的问题是我如何使用“正确的”MVVM方式。

我的mainwindow.xaml:

<Window.Resources>
    <DataTemplate DataType="{x:Type Model:Device}">
        <Canvas>
            <View:DeviceUserControl/>
        </Canvas>
    </DataTemplate>
</Window.Resources>

//---- SNIP----

 <Grid Name="grid1">
   <ItemsControl ItemsSource="{Binding Devices}" />
 </Grid>

DeviceUserControl.xaml

//--- SNIP ---
Image Name="DeviceImage" Source="{StaticResource IconAdd}"/>

DeviceModel

//--- SNIP ---
public enum Typeenum
{
 FrequenceGenerator,
 Oscilloscope,
 Test1,
 Test2
};
public Typeenum Type { get { return type; } set { type = value; NotifyPropertyChanged("Type"); } }

我想根据对象的类型更改 DeviceImage 。我已经尝试过依赖属性,但它没有按预期工作(它每次都返回相同的类型)。 我真的不需要notifyPropertyChanged,因为我只对实例化Usercontrol时更改图像源感兴趣。

1 个答案:

答案 0 :(得分:0)

首先,您应该将视图绑定到ViewModel,而不是模型。至少这就是MVVM的全部意义所在。此外,如果您希望在属性更改时发生某些事情,那么一种方法是订阅ViewModel中的PropertyChanged事件(我假设您知道应该实现INotifyPropertyChanged接口)然后放置您的逻辑关于房产改变应该发生什么。

代码示例

this.PropertyChanged += (s,e)=>{
    // Your code here.
    // e.g. this.MyImageSource = "http://img.com/image.jpg"
}

代码示例假定您对属性更改的事件称为PropertyChanged,并且图像控件的源是绑定到ViewModel中MyImageSource属性的数据。 希望这会有所帮助。