Возможно ли связывать данные в «неправильном» направлении? Я хочу, чтобы значение в пользовательском элементе управления привязывалось к моей ViewModel. Я попробовал привязку с режимом «OneWayToSource», но я не могу заставить его работать.WPF MVVM Список привязок к пользовательскому управлению для ViewModel
Сценарий (упрощенно):
У меня есть пользовательский элемент управления (MyCustomControl), который имеет свойство зависимостей, которое является списком строк:
public class MyCustomControl : Control
{
static MyCustomControl()
{
//Make sure the template in Themes/Generic.xaml is used.
DefaultStyleKeyProperty.OverrideMetadata(typeof (MyCustomControl), new FrameworkPropertyMetadata(typeof (MyCustomControl)));
//Create/Register the dependency properties.
CheckedItemsProperty = DependencyProperty.Register("MyStringList", typeof (List<string>), typeof (MyCustomControl), new FrameworkPropertyMetadata(new List<string>()));
}
public List<string> MyStringList
{
get
{
return (List<string>)GetValue(MyCustomControl.MyStringListProperty);
}
set
{
var oldValue = (List<string>)GetValue(MyCustomControl.MyStringListProperty);
var newValue = value;
SetValue(MyCustomControl.MyStringListProperty, newValue);
OnPropertyChanged(new DependencyPropertyChangedEventArgs(MyCustomControl.MyStringListProperty, oldValue, newValue));
}
}
public static readonly DependencyProperty MyStringListProperty;
}
управления также содержит код для манипулирования этим список.
Я использую этот настраиваемый элемент управления в UserControl, который имеет ViewModel. ViewModel имеет свойство, которое также список строк:
public List<string> MyStringsInTheViewModel
{
get
{
return _myStringsInTheViewModel;
}
set
{
if (value != _myStringsInTheViewModel)
{
_myStringsInTheViewModel = value;
OnPropertyChanged("MyStringsInTheViewModel");
}
}
}
private List<string> _myStringsInTheViewModel;
Теперь я хочу, чтобы связать список в моем таможенном контроле (MyStringList) в список в моем ViewModel (MyStringsInTheViewModel), так что, когда список изменяется в пользовательском контроле он также изменяется в ViewModel. Я пробовал это, но не могу заставить его работать ...
<myns:MyCustomControl MyStringList="{Binding Path=MyStringsInTheViewModel, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}">
Как я могу сделать такое связывание?
Почему вы используете `OneWayToSource`? Я подозреваю, что удаление «Mode» и «UpdateSourceTrigger» может быть достаточно для того, чтобы привязка работала. – 2010-12-10 12:14:40