我在视图模型中有一个名为(Users)的可观察集合,它与视图中的ListViewControl (lstUsers)绑定在一起,我需要的是滚动到列表视图中当前登录的用户。我在大多数使用scroll from code的例子中都看到了如下内容:
lstUsers.ScrollIntoView(lstUsers[5]);但我需要的是从视图模型中处理它。
请多多指教!
发布于 2014-12-02 06:31:19
是的,在MVVM中总会有你需要控制的时候。有多种方法可以做到这一点,但这里有一种简单的方法,不用从WPF中的控件派生或处理路由命令或其他类似的玩意儿。
总而言之:
请注意,这是一个粗略的示例,请确保在显示窗口之前设置了您的DataContext。
代码/视图模型:
public class ViewModel
{
private ListBox _listBox;
private void ReceiveListBox(ListBox listBox)
{
_listBox = listBox;
}
public static readonly DependencyProperty ListBoxHookProperty = DependencyProperty.RegisterAttached(
"ListBoxHook", typeof (ListBox), typeof (ViewModel), new PropertyMetadata(default(ListBox), ListBoxHookPropertyChangedCallback));
private static void ListBoxHookPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
var listBox = (ListBox) dependencyObject;
var viewModel = (ViewModel) listBox.DataContext;
viewModel.ReceiveListBox(listBox);
}
public static void SetListBoxHook(DependencyObject element, ListBox value)
{
element.SetValue(ListBoxHookProperty, value);
}
public static ListBox GetListBoxHook(DependencyObject element)
{
return (ListBox) element.GetValue(ListBoxHookProperty);
}
}好的,这将让我们将ListBox传递回视图;您可以随心所欲地处理它。
现在,只需在XAML中设置属性:
<ListBox wpfApplication1:ViewModel.ListBoxHook="{Binding RelativeSource={RelativeSource Self}}" />可以开始了!
https://stackoverflow.com/questions/27237786
复制相似问题