По сути, у меня есть основное окно с пользовательским элементом управления, содержащим свойство, привязанное к модели представления главного окна. Идея заключается в том, что когда свойство изменяется в пользовательской форме, что при привязке свойство в главном окне также изменится viewmodel. Проблема в том, что это работает, когда пользовательский элемент управления не имеет ViewModel, когда я добавляю простой ViewModel в пользовательский элемент управления, привязка больше не работает. И поскольку мне нужно иметь ViewModel для моего контроля, мне нужно выяснить, почему добавление ViewModel нарушает привязку и как ее исправлять. Любые предложения приветствуются.Свойство Dependency binding usercontrol с viewmodel
public partial class Control1 : UserControl, INotifyPropertyChanged
{
public Control1()
{
InitializeComponent();
Loaded += Control1_Loaded;
}
void Control1_Loaded(object sender, RoutedEventArgs e)
{
DataContext = new Control1ViewModel();
}
public static DependencyProperty SavedStringProperty = DependencyProperty.Register(
"SavedString", typeof(string), typeof(Control1));
public string SavedString
{
get
{
return (string)GetValue(SavedStringProperty);
}
set
{
SetValue(SavedStringProperty, value);
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
SavedString = "Hi";
}
}
public class MainWindowViewModel : INotifyPropertyChanged
{
private string _message = "Hi";
public string myMessage
{
get
{
return _message;
}
set
{
_message = value;
FirePropChanged("myMessage");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
private string _savedString;
public string SavedString
{
get
{
return _savedString;
}
set
{
_savedString = value;
FirePropChanged("SavedString");
}
}
}
XAML (в MainWindow):
<myCtrl:Control1 SavedString="{Binding Path=SavedString, Mode=TwoWay}"/>
CS (мой УНЦ ViewMode):
public class Control1ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
это сработало хорошо спасибо – phcoding
@phcoding это имело значение, если вы написали его с дорогой до RelativeSource? –
@phcoding, была ли причина, по которой вы отправили ответный пример обратно пользователю, который ответил вам? Это кажется ненужным. – Sheridan