0

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

我正在使用 MVVM 模式,并且有 1 个 Viewmodel、几个视图和几个模型。所有视图都只是放在我的 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}"/>

设备型号

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

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

4

1 回答 1

0

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

代码示例

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

代码示例假定调用了您的属性更改事件,PropertyChanged并且图像控件的源是绑定到MyImageSourceViewModel 中的属性的数据。希望这可以帮助。

于 2013-02-19T15:35:57.217 回答