我是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时更改图像源感兴趣。
答案 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
属性的数据。
希望这会有所帮助。