SensorModel
という名前のviewModelクラスにdataContextをバインドするSensorControl
という名前のuserControlがあります。 結合が成功し、初期値のViewModelのは、ユーザーコントロールに表示されますが、問題は、私はのViewModelのプロパティを変更とき、ユーザーコントロールはを更新しないということである、と私は手動で(でそれを更新する必要がありますそのdataContextにnullを割り当て、viewModelを再度割り当てます)。 ここに私のコードの簡単な例があります。viewModelの変更でビューが更新されない
SensorControl.xml:
<UserControl ...[other attributes]... DataContext={Binding Model}>
.
.
.
<Label Content="{Binding Title}"/>
.
.
.
</UserControl>
SensorControl.xml.cs(コードビハインド):
public partial class SensorControl : UserControl
{
public SensorModel model;
public SensorModel Model
{
get { return model; }
set { model = value; }
}
public SensorControl(SensorModel sm)
{
Model = sm;
}
}
MainWindow.xml.cs:
public partial class MainWindow : Window
{
public SensorModel sensorModel_1;
public SensorControl sensorControl_1;
public MainWindow()
{
InitializeComponent();
sensorModel_1 = new SensorModel(...[some arguments]...);
sensorControl_1 = new SensorControl(sensorModel_1);
mainGrid.Children.Add(sensorControl_1);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
sensorModel_1.Title = "myTitle";
//The UserControl does not update
}
0)Iを実装INotifyPropertyChanged
in SensorModel
1)私が必要とする理由は、私のプロジェクト(それは実際の電子センサーです)に「センサー」という概念が1つしかないので、私はそのための単一のモデルを持っていますデータベースなど)、UIにはSensorのさまざまな側面を提示するための複数のuserControlがあります。だから私は実際のセンサーごとに1つのモデル(SensorModel)のインスタンスを作成しなければならず、複数のuserControlsがそれにバインドする必要があります(それぞれがモデルの異なる部分を使用します)。
2)私はWPFの新機能ではありませんが、私はMVVMにはまったく新しいものです。何か本質的なことを誤解している可能性があるので、誰かが正しい方法を明確に説明できたらうれしいです。ユーザーコントロールには、事前
'ViewModel'は' UserControl'の一部であってはなりません。 – AnjumSKhan