相关疑难解决方法(0)

使用MVVM通过拖放重新排序ItemsControl

我最近问了一个关于如何使用Drag and Drop重新排序ItemsControl的问题(ItemsControl拖放).答案目前很有用(下面的代码),但现在我正在尝试实现MVVM,当前的解决方案需要访问视图中的项目.任何想法如何改变这与MVVM一起工作?我计划将附加属性绑定到命令,但我不知道如何摆脱诸如以下的行:int index = (int)(e.GetPosition(DimsContainer).X / width);

当前的拖放代码:

private void DimsContainer_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        _isDown = true;
        _startPoint = e.GetPosition(this.DimsContainer);
    }

    private void DimsContainer_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        _isDown = false;
        _isDragging = false;

        if (_realDragSource != null)
        {
            _realDragSource.ReleaseMouseCapture();
        }
    }

    private void DimsContainer_PreviewMouseMove(object sender, MouseEventArgs e)
    {
        if (_isDown)
        {
            if ((_isDragging == false) &&
                ((Math.Abs(e.GetPosition(this.DimsContainer).X - _startPoint.X) >
                    SystemParameters.MinimumHorizontalDragDistance) ||
                 (Math.Abs(e.GetPosition(this.DimsContainer).Y - _startPoint.Y) >
                    SystemParameters.MinimumVerticalDragDistance)))
            {
                _isDragging = true;
                _realDragSource = e.Source …
Run Code Online (Sandbox Code Playgroud)

c# wpf drag-and-drop itemscontrol mvvm

7
推荐指数
1
解决办法
8866
查看次数

WPF ScrollViewer:点击=点击,点击并按住/拖动=滚动.怎么做到这一点?

我正在开发一个WPF触摸应用程序.我有一个包含按钮的滚动查看器.我想触摸拖动按钮时滚动显示,并在点击时调用按钮的命令.以下是一些入门代码:

<Window x:Class="wpf_Button_Scroll.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:wpf_Button_Scroll"
    Title="MainWindow" Height="350" Width="200">
<Window.DataContext>
    <my:MyViewModel />
</Window.DataContext>

<Grid>
    <ScrollViewer>
        <ListView ItemsSource="{Binding MyData}" HorizontalAlignment="Stretch">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding}" 
                            Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}" 
                            CommandParameter="{Binding}"
                            Margin="5 2" Width="150" Height="50"
                            FontSize="30" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ScrollViewer>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

和视图模型:

namespace wpf_Button_Scroll
{
class MyViewModel
{
    public MyViewModel()
    {
        MyCommand = new ICommandImplementation();
    }

    public string[] MyData
    {
        get
        {
            return new string[]{
                "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", 
                "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", …
Run Code Online (Sandbox Code Playgroud)

wpf xaml scrollviewer touch

6
推荐指数
1
解决办法
2360
查看次数

标签 统计

wpf ×2

c# ×1

drag-and-drop ×1

itemscontrol ×1

mvvm ×1

scrollviewer ×1

touch ×1

xaml ×1