【问题标题】:IsEnabled button in datagrid mvvm wpfdatagrid mvvm wpf中的IsEnabled按钮
【发布时间】:2018-01-15 13:27:36
【问题描述】:

如何使用 mvvm 启用/禁用 datagrid 中的按钮,其中列状态等于 c# 中的某个值?

谢谢。

附:我是 mvvm 和 wpf 的新手。

已编辑:

我的代码只在 Datagrid 中打印数据。我想在列状态等于 1 时禁用编辑按钮。

你可以在下面看到我的代码。

模型文件

public class Reestr
{
    private int id;
    private string date;
    private string market;
    private int status;
    public int Id
    {
        get { return id; }
        set {
            id = value;
        }
    }   
    public string Date
    {
        get { return date; }
        set {
            date = value;
        }
    }
    public string Market
    {
        get { return market; }
        set {
            market = value;
        }
    }
    public int Status
    {
        get { return status; }
        set {
            status = value;
        }
    } 
}

ViewModel 文件

public ReestrViewModel()
{
    reestr = GetListOfReestrs();
    reestr.Add(new Reestr() { Date = "01.08.2017", Market = "Market1", Status = 0 });
    reestr.Add(new Reestr() { Date = "02.08.2017", Market = "Market2", Status = 1 });
}
public ObservableCollection<Reestr> ReestrItems
{
    get { return reestr; }
}
public ObservableCollection<Reestr> GetListOfReestrs()
{
    return reestr;
}

Xaml 文件:

<DataGrid GridLinesVisibility="All"
          AutoGenerateColumns="False"
          CanUserAddRows="False"
          x:Name="ReestrDataGrid"
          ItemsSource="{Binding ReestrViewModel.ReestrItems}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID"
                            Binding="{Binding Id}"
                            IsReadOnly="True"
                            Visibility="Hidden"
                            Width="*"/>
        <DataGridTextColumn Header="Date"
                            Binding="{Binding Date}"
                            IsReadOnly="True"
                            Width="*"/>
        <DataGridTextColumn Header="Market"
                            Binding="{Binding Market}"
                            IsReadOnly="True"
                            Width="*"/>
        <DataGridTextColumn Header="Status"
                            Binding="{Binding Status}"
                            IsReadOnly="True" 
                            Width="*"/>
        <DataGridTemplateColumn Header="Operations" Width="200">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Button x:Name="ViewButton"
                                Click="ViewButton_Click"></Button>
                        <Button x:Name="EditButton"></Button>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>               
</DataGrid>

【问题讨论】:

  • 您向我们展示您的一些 xaml 和代码如何?列状态是什么意思,视图模型应该如何知道任何列?
  • 理论上你的 ViewModel 上应该有一个Command,它会绑定到你的 Button,表示命令需要实现 ICommand 接口,该接口也包含 CanExecute 方法。然后该 CanExecute 方法将用于确定是否应启用 Button。
  • @grek40,更新了我的问题。

标签: c# wpf mvvm datagrid


【解决方案1】:

您可以将StyleDataTrigger 一起使用:

<Button x:Name="EditButton">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Status}" Value="1">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

【讨论】:

  • 谢谢。这对我有帮助。
  • 顺便问一下,如何在这个按钮中设置我的自定义样式?因为我不能做这样的事情&lt;Button x:Name="EditButton" Style="MyCustomStyle"&gt;...&lt;/Button&gt;
  • 好的。谢谢,这就是我正在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2022-08-03
  • 2011-06-06
  • 2012-08-11
  • 2012-11-24
  • 2013-08-03
  • 1970-01-01
相关资源
最近更新 更多