C# 如何从视图访问viewmodel中的datagrid控件?

C# 如何从视图访问viewmodel中的datagrid控件?,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,大家好,我想在我的viewmodel中访问我的datagrid控件。我知道这是不正确的方法,但我必须这样做: <DataGrid Grid.Row="1" Margin="10,10,0,0" Height="200" Width="500" Grid.ColumnSpan="2" Name="dg" HorizontalAlignment="Left" AutoGenerat

大家好,我想在我的viewmodel中访问我的datagrid控件。我知道这是不正确的方法,但我必须这样做:

<DataGrid
       Grid.Row="1" 
       Margin="10,10,0,0"
       Height="200"
       Width="500"
       Grid.ColumnSpan="2"
       Name="dg"
       HorizontalAlignment="Left"
       AutoGenerateColumns="False"
       ItemsSource="{Binding SSID}"
       >
                <DataGrid.Columns>
                    <DataGridTextColumn Width="100" Header="Network ID" Binding="{Binding _networkID}"></DataGridTextColumn>
                    <DataGridTextColumn Width="100" Header="SSID" Binding="{Binding _ssid}"></DataGridTextColumn>
                    <DataGridTextColumn Width="100" Header="VLAN" Binding="{Binding _vlan}"></DataGridTextColumn>


</DataGrid.Columns>

我只想在Datagrid中显示在if块和else if块中选择的列。如果第一个if块的条件满足,则应隐藏其他else if块中存在的所有其他列。请告诉我在ViewModel中直接访问datagrid的方法,或者我可以通过任何其他方法来实现同样的目的。任何帮助都将非常有用。

您可以创建包含列选择状态信息的属性,例如bool值,并将其绑定到列的Visible属性。使用转换器将布尔值转换为可见性。

您可以创建包含列选择状态信息的属性,例如布尔值,并将其绑定到列的Visible属性。使用转换器将布尔值转换为可见性。

您可以创建包含列选择状态信息的属性,例如布尔值,并将其绑定到列的Visible属性。使用转换器将布尔值转换为可见性。

您可以创建包含列选择状态信息的属性,例如布尔值,并将其绑定到列的Visible属性。使用转换器从bool转换为Visibility。

这是一种糟糕的做法,但既然您希望这样做


将其作为参数从视图的代码隐藏处传递给ViewModel。

这是一种不好的做法,但因为您希望这样做


将其作为参数从视图的代码隐藏处传递给ViewModel。

这是一种不好的做法,但因为您希望这样做


将其作为参数从视图的代码隐藏处传递给ViewModel。

这是一种不好的做法,但因为您希望这样做


将其作为参数从视图的代码隐藏处传递给ViewModel。

您可以将colunm可见性道具绑定到ViewModel道具:

<DataGridTextColumn Width="100" Header="Network ID" Binding="{Binding _networkID}" Visibility="{Binding NetworkVisibility}"></DataGridTextColumn>
<DataGridTextColumn Width="100" Header="SSID" Binding="{Binding _ssid}" Visibilty="{Binding  SSIDVisible, Converter={StaticResource  SSIDVisible}}"></DataGridTextColumn>
或者您可以使用bool类型的viewmodel道具,然后在XAML中使用BooltVisibilityConverter

 public bool SSIDVisible
    {
        get { 
                if(condition) return true;
            else return false;
            }
    }

对于此道具,您可以使用NotifyPropertyChanged(如果它应该动态更改),如Andrew Stephens answer中所述。

您可以将colunm可见性道具绑定到viewmodel道具:

<DataGridTextColumn Width="100" Header="Network ID" Binding="{Binding _networkID}" Visibility="{Binding NetworkVisibility}"></DataGridTextColumn>
<DataGridTextColumn Width="100" Header="SSID" Binding="{Binding _ssid}" Visibilty="{Binding  SSIDVisible, Converter={StaticResource  SSIDVisible}}"></DataGridTextColumn>
或者您可以使用bool类型的viewmodel道具,然后在XAML中使用BooltVisibilityConverter

 public bool SSIDVisible
    {
        get { 
                if(condition) return true;
            else return false;
            }
    }

对于此道具,您可以使用NotifyPropertyChanged(如果它应该动态更改),如Andrew Stephens answer中所述。

您可以将colunm可见性道具绑定到viewmodel道具:

<DataGridTextColumn Width="100" Header="Network ID" Binding="{Binding _networkID}" Visibility="{Binding NetworkVisibility}"></DataGridTextColumn>
<DataGridTextColumn Width="100" Header="SSID" Binding="{Binding _ssid}" Visibilty="{Binding  SSIDVisible, Converter={StaticResource  SSIDVisible}}"></DataGridTextColumn>
或者您可以使用bool类型的viewmodel道具,然后在XAML中使用BooltVisibilityConverter

 public bool SSIDVisible
    {
        get { 
                if(condition) return true;
            else return false;
            }
    }

对于此道具,您可以使用NotifyPropertyChanged(如果它应该动态更改),如Andrew Stephens answer中所述。

您可以将colunm可见性道具绑定到viewmodel道具:

<DataGridTextColumn Width="100" Header="Network ID" Binding="{Binding _networkID}" Visibility="{Binding NetworkVisibility}"></DataGridTextColumn>
<DataGridTextColumn Width="100" Header="SSID" Binding="{Binding _ssid}" Visibilty="{Binding  SSIDVisible, Converter={StaticResource  SSIDVisible}}"></DataGridTextColumn>
或者您可以使用bool类型的viewmodel道具,然后在XAML中使用BooltVisibilityConverter

 public bool SSIDVisible
    {
        get { 
                if(condition) return true;
            else return false;
            }
    }

对于这个道具,您可以使用NotifyPropertyChanged(如果它应该动态更改),如Andrew Stephens answer中所述。

您可以从VM中公开几个布尔属性,指示要显示的列集,然后将每个列的可见性属性绑定到相关属性。您需要使用
BooleanToVisibilityConverter
将布尔值转换为可见性值(可见或折叠)。大概是这样的:-

<Window.Resources>
    <BoolToVisibilityConverter x:Key="boolToVisConv" />
</Window.Resources>

<DataGridTextColumn Visibility="{Binding ShowWep, Converter={StaticResource boolToVisConv}" ... />    
<DataGridTextColumn Visibility="{Binding ShowWpa, Converter={StaticResource boolToVisConv}" ... />
public class MyViewModel
{
    private bool _showWpa; 

    public bool ShowWpa
    {
        get
        {
            return _showWpa;
        }
        set
        {
            if (_showWpa != value)
            {
                _showWpa = value;
                NotifyPropertyChanged("ShowWpa");
            }
        }
    }

    //etc..
}

您可以从VM中公开几个布尔属性,指示要显示的列集,然后将每个列的可见性属性绑定到相关属性。您需要使用
BooleanToVisibilityConverter
将布尔值转换为可见性值(可见或折叠)。大概是这样的:-

<Window.Resources>
    <BoolToVisibilityConverter x:Key="boolToVisConv" />
</Window.Resources>

<DataGridTextColumn Visibility="{Binding ShowWep, Converter={StaticResource boolToVisConv}" ... />    
<DataGridTextColumn Visibility="{Binding ShowWpa, Converter={StaticResource boolToVisConv}" ... />
public class MyViewModel
{
    private bool _showWpa; 

    public bool ShowWpa
    {
        get
        {
            return _showWpa;
        }
        set
        {
            if (_showWpa != value)
            {
                _showWpa = value;
                NotifyPropertyChanged("ShowWpa");
            }
        }
    }

    //etc..
}

您可以从VM中公开几个布尔属性,指示要显示的列集,然后将每个列的可见性属性绑定到相关属性。您需要使用
BooleanToVisibilityConverter
将布尔值转换为可见性值(可见或折叠)。大概是这样的:-

<Window.Resources>
    <BoolToVisibilityConverter x:Key="boolToVisConv" />
</Window.Resources>

<DataGridTextColumn Visibility="{Binding ShowWep, Converter={StaticResource boolToVisConv}" ... />    
<DataGridTextColumn Visibility="{Binding ShowWpa, Converter={StaticResource boolToVisConv}" ... />
public class MyViewModel
{
    private bool _showWpa; 

    public bool ShowWpa
    {
        get
        {
            return _showWpa;
        }
        set
        {
            if (_showWpa != value)
            {
                _showWpa = value;
                NotifyPropertyChanged("ShowWpa");
            }
        }
    }

    //etc..
}

您可以从VM中公开几个布尔属性,指示要显示的列集,然后将每个列的可见性属性绑定到相关属性。您需要使用
BooleanToVisibilityConverter
将布尔值转换为可见性值(可见或折叠)。大概是这样的:-

<Window.Resources>
    <BoolToVisibilityConverter x:Key="boolToVisConv" />
</Window.Resources>

<DataGridTextColumn Visibility="{Binding ShowWep, Converter={StaticResource boolToVisConv}" ... />    
<DataGridTextColumn Visibility="{Binding ShowWpa, Converter={StaticResource boolToVisConv}" ... />
public class MyViewModel
{
    private bool _showWpa; 

    public bool ShowWpa
    {
        get
        {
            return _showWpa;
        }
        set
        {
            if (_showWpa != value)
            {
                _showWpa = value;
                NotifyPropertyChanged("ShowWpa");
            }
        }
    }

    //etc..
}

在MVVM中,从ViewModel访问视图是不好的做法。在MVVM中,从ViewModel访问视图是不好的做法。在MVVM中,从ViewModel访问视图是不好的做法。在MVVM中,从ViewModel访问视图是不好的做法。您能说明如何实现
ShowWep
属性吗?您能说明如何实现
ShowWep
属性?您可以演示如何实现
ShowWep
属性吗?您可以演示如何实现
ShowWep
属性吗?额外的列仍在显示?当然,您可以仅为那些可以根据条件隐藏的列指定可见性绑定。您可以在viewmodel中为每列指定任意数量的单个道具。仍将显示额外的列?当然,您可以仅为根据条件可以隐藏的列指定可见性绑定。您可以在viewmodel中为每列指定任意数量的单个道具。仍将显示额外的列?当然,您可以仅为根据条件可以隐藏的列指定可见性绑定。您可以在viewmodel中为每列指定任意数量的单个道具。仍将显示额外的列?当然,您可以仅为根据条件可以隐藏的列指定可见性绑定。您可以指定任意数量的单个