C# datagrid mvvm wpf中的IsEnabled按钮

C# datagrid mvvm wpf中的IsEnabled按钮,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,如何使用mvvm在datagrid中启用/禁用按钮,其中列状态等于c#中的某个值 谢谢 另外,我是mvvm和wpf的新手 编辑: <DataGrid GridLinesVisibility="All" AutoGenerateColumns="False" CanUserAddRows="False" x:Name="ReestrDataGrid" ItemsSource="{Binding ReestrVie

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

谢谢

另外,我是mvvm和wpf的新手

编辑:

<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>
我的代码只打印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;
        }
    } 
}
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;
}
视图模型文件

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;
        }
    } 
}
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;
}
公共ReestrViewModel() { reestr=GetListOfRestrs(); reestr.Add(新reestr(){Date=“01.08.2017”,Market=“Market1”,Status=0}); reestr.Add(新reestr(){Date=“02.08.2017”,Market=“Market2”,Status=1}); } 公共可观测收集ReestrItems { 获取{return reestr;} } 公共可观测集合GetListofRestrs() { 返回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>

您可以将
样式
数据触发器一起使用

<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>

您可以将
样式
数据触发器一起使用

<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>


让我们看看您的一些xaml和代码如何?您所说的列状态是什么意思,viewmodel如何知道任何列?理论上,您应该在viewmodel上有一个绑定到按钮的
命令
,该命令需要实现ICommand界面,该界面还包括CanExecute方法。然后将使用CanExecute方法来确定是否应启用按钮。@grek40,更新了我的问题。给我们看一些xaml和代码怎么样?您所说的列状态是什么意思,viewmodel如何知道任何列?理论上,您应该在viewmodel上有一个绑定到按钮的
命令
,该命令需要实现ICommand界面,该界面还包括CanExecute方法。然后将使用CanExecute方法确定是否应启用按钮。@grek40,更新了我的问题。谢谢。这对我很有帮助。顺便问一下,我如何在这个按钮中设置我的自定义样式?因为我不能这样做
。但是如果你有其他问题,请问另一个问题。谢谢,这就是我要找的。谢谢。这对我很有帮助。顺便问一下,我如何在这个按钮中设置我的自定义样式?因为我不能这样做
。但是如果你有其他问题,请问另一个问题。谢谢,这就是我要找的。