是否有可能以“错误”的方向绑定数据?我希望自定义控件中的值绑定到我的ViewModel。我尝试使用“OneWayToSource”模式进行绑定,但我无法让它工作。
情景(简化):
我有一个自定义控件(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;
}
该控件还包含操作此列表的代码。
我在具有ViewModel的UserControl中使用此自定义控件。 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}">
如何制作此类绑定?
答案 0 :(得分:2)
使用ObservableCollection<T>
代替List<T>
。它实现了INotifyCollectionChanged
接口。