私はMVVM WPFアプリケーションで作業しており、これを解決しようとしています。 %)
私はモデルクラスDeviceModelを App.xaml.csからインスタンス化しました。このモデルは、 INotifyPropertyChangedインターフェイスを実装しています。InitializeComponent()からインスタンス化された重複モデル
public partial class App : Application
{
public DeviceModel DeviceModelInstance { get; set; }
public App()
{
DeviceModelInstance = new DeviceModel();
}
}
:
<Application.Resources>
<vm:ViewModelBase x:Key="ViewModelBaseApp"/>
<m:DeviceModel x:Key="DeviceModelApp"/>
</Application.Resources>
その後MainWindow.xamlから私はViewModelBaseをインスタンス化:
<Window.DataContext>
<Binding Source="{StaticResource ViewModelBaseApp}"/>
</Window.DataContext>
その後、私はのボタンをバインドしますUI( Mai のICommandインタフェースを実装ViewModelBaseのコマンドにnWindow.xaml)は、:
Command="{Binding InputPhantomCommand, Converter={StaticResource InputPhantomConverter}, Source={StaticResource ViewModelBaseApp}}"
これは素晴らしい作品!私はViewModelBaseでコマンドが呼び出され、今度は他のクラスに伝播イベントを、にPropertyChanged をトリガー( App.xaml.csでインスタンス)DeviceModelInstanceのプロパティを変更します、ボタンを押してくださいそのイベントを聞いている。すべてのICommandバインドされたボタンは、この方法で動作します。
私はスライダーデバイスモデルクラスのプロパティに、すなわち結合したときただし、:
Value="{Binding InputChannel2.Gain, Converter={StaticResource InputGainConverter}, Source={StaticResource DeviceModelApp}}"
をスライダーのすべてがにバインドされますのInitializeComponent(でインスタンスを取得しますデバイスモデルクラスを、複製)コンストラクタのメソッド MainWindow.xaml.cs。いずれかのスライダを動かすと、重複したモデルは変更にうまく反応します。スライダと同じプロパティにバインドされているラベルはすべて動的に更新されます。ただし、すべてのイベントは、元のDeviceModelInstanceオブジェクト( App.xaml.cs)ののイベントで聴かれ、明らかにイベントは発生しません。
ボタンのすべては、私が App.xaml.csで作成DeviceModelInstanceと対話している理由のスライダーと、それに対応するラベルの全てがと対話している間、私は(デバイスモデルを複製し、把握することはできません)メインウィンドウのInitializeComponentの()で作成されます ...
私はそれがXAMLで正しく元DeviceModelInstanceを参照の問題だ疑いがあるが、私はこれを行う方法を知りません。ありがとうございました!)
2つのDeviceModelインスタンスを意図的に作成します.1つはAppコンストラクタに、もう1つはApplication.Resourcesに作成します。 – Clemens
しかし、App.xamlの を省略すると、以前作成したDeviceModelInstanceをMainWindow.xamlのStaticResourceとしてどのように使用できますか? –
user141548
App.xamlでDeviceModelプロパティを作成するのはなぜですか? – mm8