标签: commandbinding

WPF - 如何强制命令通过其CommandBindings重新评估'CanExecute'

我有一个层次结构Menu中的每个MenuItem都将其Command属性设置为RoutedCommand我已定义的属性.关联CommandBinding提供了一个回调,用于评估CanExecute控制每个的启用状态MenuItem.

几乎可行.菜单项最初会显示正确的启用和禁用状态.但是,当我的CanExecute回调使用的数据发生变化时,我需要命令从我的回调中重新请求结果,以便在UI中反映这种新状态.

似乎没有任何公共方法RoutedCommandCommandBinding为此.

请注意,当我单击或键入控件时再次使用回调(我猜它是在输入时触发的,因为鼠标悬停不会导致刷新).

.net wpf command commandbinding

125
推荐指数
4
解决办法
8万
查看次数

如何将Close命令绑定到按钮

最简单的方法是实现ButtonClick事件处理程序和调用Window.Close()方法,但是如何通过Command绑定来实现呢?

wpf button wpf-controls commandbinding

62
推荐指数
5
解决办法
11万
查看次数

使用父级的DataContext(WPF - 动态菜单命令绑定)

我查看了这个网站和谷歌,解决方案对我不起作用.

我在UserControl的ViewModel上有一个命令.好吧,usercontrol有一个绑定到ObservableCollection的ItemsControl.在ItemsControl.ItemTemplate的DataTemplate中,我有一个按钮,我想使用该命令.我无法绑定命令,因为在DataTemplate中,datacontext不是ViewModel而是ObservableCollection的项.

问题是:如果丢失了父datacontext,如何将按钮绑定到命令?

我认为这需要一个简单的解决方案,因为我认为这是一个常见的问题.

想象一下这个场景:

您有一个带有observableCollection的ListBox项作为ItemsSource,因此您在ListBox中为集合中的每个元素使用了一个datatemplate.好吧,您想删除所选项目,并在该行的每一行中放置一个按钮.你是怎样做的?

在MVP中,我可以在按钮的单击事件中执行此操作:

Button but = e.Source as Button;

if (but != null)
      Presenter.ActualNote = but.DataContext as Note;
Run Code Online (Sandbox Code Playgroud)

简而言之.您将行的datacontext(所选项目)发送到演示者.

但是,我怎么能用mvvm方式呢?因为我需要使用命令但是我无法将命令分配给按钮,因为该按钮对ViewModel(命令所在的位置)一无所知.

正如您所看到的,按钮必须存在于datatemplate中,然后datacontext不再是ViewModel ....这就是我需要访问父级DataContext以访问命令的原因.

我希望你能更好地理解我的问题.

谢谢.

c# wpf menu dynamic commandbinding

30
推荐指数
2
解决办法
4万
查看次数

WPF DataGrid:CommandBinding为双击而不是使用事件

我知道如何在我的DataGrid中使用MouseDoubleClick事件来获取selectedvalue,但是如何使用命令绑定呢?这样我的ViewModel就可以处理逻辑.

到目前为止,我有以下内容:

<DataGrid Name="TestGrid" Grid.Row="2" Grid.ColumnSpan="2" AutoGenerateColumns="True" MouseDoubleClick="TestGrid_MouseDoubleClick"
          ItemsSource="{Binding Registrations}" SelectedValue="{Binding CurrentRegistration}" IsReadOnly="True" AlternationCount="2" GridLinesVisibility="None">
Run Code Online (Sandbox Code Playgroud)

我想摆脱MouseDoubleClick并适当地替换它.

wpf datagrid double-click commandbinding

30
推荐指数
2
解决办法
5万
查看次数

将命令绑定到已加载的视图事件

我试图在视图加载完成后获得一个方法来运行.我试图将命令绑定到Loaded视图中的事件但它无法运行.抛出的内部异常是

'为'System.Windows.Data.Binding'提供价值引发了一个异常.行号'14'和行位置'14'

<UserControl x:Class="Components.Map.MapView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:map="clr-namespace:Components.Map"
             xmlns:controls="clr-namespace:Windows.Controls;assembly=Windows.Controls"
             xmlns:ValidationRules="clr-namespace:Windows.Controls.ValidationRules;assembly=Windows.Controls"
             xmlns:directGraphicsControl="clr-namespace:Windows.DirectGraphicsControl;assembly=Windows.DirectGraphicsControl"
             xmlns:colorBar="clr-namespace:Components.Common.ColorBar;assembly=Components.Common"
             xmlns:RefinedRibbonControls="clr-namespace:Components.Common.Controls.RefinedRibbonControls;assembly=Components.Common"
             xmlns:UserControls="clr-namespace:Components.Common.UserControls;assembly=Components.Common"
             xmlns:map1="clr-namespace:Models.Map;assembly=Models.Map"
             xmlns:utilities="clr-namespace:Windows.Utilities;assembly=Windows.Utilities"
             xmlns:system="clr-namespace:System;assembly=mscorlib"
             Loaded="{Binding Path=MapControlViewModel.MapLoadedCommand}">
Run Code Online (Sandbox Code Playgroud)

我怎么能绑定到视图的Loaded事件,所以我可以在视图加载完后运行一些东西?

wpf xaml commandbinding

30
推荐指数
1
解决办法
2万
查看次数

WPF/MVVM - 如何在ViewModel中双击TreeViewItems?

(注-这是一个重新出任我的第一个问题,下得了错误标题发布:这里对不起!)

我有一个标准的WPF树视图,并有绑定项目来查看模型类.

我现在希望在双击项目时处理行为(打开文档visual-studio-style).

我可以在树视图(显示xaml)的控件中触发事件处理程序,但是如何绑定到视图模型类上的特定行为 - 例如ProjectViewModel?

最好绑定到ICommand-implementationmen,因为这在别处使用...

<TreeView ItemsSource="{Binding Projects}" MouseDoubleClick="TreeView_MouseDoubleClick">
    <TreeView.ItemContainerStyle>
        <!-- 
This Style binds a TreeViewItem to a TreeViewItemViewModel. 
-->
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
            <Setter Property="FontWeight" Value="Normal" />
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="FontWeight" Value="Bold" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TreeView.ItemContainerStyle>

    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type Implementations:ProjectViewModel}" ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal">
                <Image Width="16" Height="16" Margin="3,0" Source="Images\Region.png" />
                <TextBlock Text="{Binding DisplayName}" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type Implementations:PumpViewModel}" ItemsSource="{Binding Children}"> …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm mouseevent commandbinding

29
推荐指数
4
解决办法
3万
查看次数

WPF:如何使用MVVM将命令绑定到ListBoxItem?

我刚开始学习MVVM.我通过遵循这个MVVM教程从头开始制作应用程序(我强烈推荐给所有MVVM初学者).基本上,我到目前为止创建的是一些文本框,其中用户添加他或她的数据,一个按钮来保存该数据,随后使用所有条目填充ListBox.

这就是我陷入困境的地方:我希望能够双击ListBoxItem并触发我创建并添加到ViewModel的命令.我不知道如何完成XAML方面,即我不知道如何将该命令绑定到ListBox(Item).

这是XAML:

...
<ListBox 
    Name="EntriesListBox" 
    Width="228" 
    Height="208" 
    Margin="138,12,0,0" 
    HorizontalAlignment="Left" 
    VerticalAlignment="Top" 
    ItemsSource="{Binding Entries}" />
...
Run Code Online (Sandbox Code Playgroud)

这是ViewModel:

public class MainWindowViewModel : DependencyObject
{
    ...
    public IEntriesProvider Entries
    {
        get { return entries; }
    }

    private IEntriesProvider entries;
    public OpenEntryCommand OpenEntryCmd { get; set; }

    public MainWindowViewModel(IEntriesProvider source)
    {
        this.entries = source;
        ...
        this.OpenEntryCmd = new OpenEntryCommand(this);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

最后,这是我想在用户双击EntriesListBox中的项目后执行的OpenEntryCommand:

public class OpenEntryCommand : ICommand
{
    private MainWindowViewModel viewModel;

    public OpenEntryCommand(MainWindowViewModel viewModel)
    {
        this.viewModel = viewModel;
    }

    public event …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding mvvm commandbinding

26
推荐指数
3
解决办法
7万
查看次数

WPF:按下enter按钮时在搜索字段中执行命令绑定

我的WPF应用程序中有一个搜索字段,其中包含一个包含命令绑定的搜索按钮.这很好用,但是当按下键盘上的Enter键时,如何对文本字段使用相同的命令绑定?我见过的例子都是使用KeyDown事件处理程序后面的代码.有没有一种聪明的方法可以使用xaml和命令绑定来完成这项工作?

c# wpf xaml commandbinding

21
推荐指数
2
解决办法
1万
查看次数

为TextBlock启用命令绑定

我正在开发一个WPF应用程序,并且有一个TextBlock,我想使用命令绑定来点击时触发命令.实现这一目标的最佳方法是什么?

  • TextBlock控件没有Command属性,但它有一个CommandManager.这是什么?它可以用于命令绑定吗?我已经看过许多其他控件以及这个属性..

  • 我有一些可以使用的监督控制吗?是否建议使用按钮并将其设计为不像按钮?

  • 是否有一些控件支持Command绑定,我可以围绕TextBlock?

  • 我应该创建一个自定义控件,它基本上是一个TextBlock,但具有额外的属性Command和CommandArgument,它可以在例如MouseLeftButtonDown属性上启用命令绑定.

.net wpf command commandbinding

15
推荐指数
1
解决办法
7903
查看次数

在MVVM中接收CommandParameter值

我绑定我的命令,如:

<Button Command="{Binding NextCommand}" 
    CommandParameter="Hello" 
    Content="Next" /> 
Run Code Online (Sandbox Code Playgroud)

在这里,我还绑定了它的CommandParameter属性,现在如何从NextCommand获取它的值.

public ICommand NextCommand
    {
        get
        {
            if (_nextCommand == null)
            {
                _nextCommand = new RelayCommand(
                    param => this.DisplayNextPageRecords()
                    //param => true
                    );
            }
            return _nextCommand;
        }
    }
Run Code Online (Sandbox Code Playgroud)

其功能定义:

public ObservableCollection<PhonesViewModel> DisplayNextPageRecords()
    {

            //How to fetch CommandParameter value which is set by 
            //value "Hello" at xaml. I want here "Hello"
            PageNumber++;
            CreatePhones();
            return this.AllPhones;

    }
Run Code Online (Sandbox Code Playgroud)

如何获取CommandParameter值?

提前致谢.

parameters wpf mvvm commandbinding

14
推荐指数
1
解决办法
2万
查看次数