0

私は MVVM と WPF を初めて使用するので、これは幅広い質問またはばかげた質問かもしれませんが、

私はMVVMパターンを使用しており、1つのビューモデル、いくつかのビュー、およびいくつかのモデルがあります。すべてのビューは、mainwindow.xaml に配置された単なるユーザー コントロールです。

問題のビューは、いくつかのプロパティを持つモデルにバインドされています。そのうちの 1 つを使用して、ユーザー コントロールの画像を動的に変更します。

私はこのプロパティにアクセスしようとして非常に苦労しています.私の質問は、これを「正しい」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は本当に必要ありません。

4

1 に答える 1

0

まず、モデルではなく、ビューをビューモデルにバインドする必要があります。少なくとも、それが MVVM のすべてです。また、プロパティが変更されたときに何かを発生させたい場合はPropertyChanged、ViewModel でイベントをサブスクライブし (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 に答える