C# 如何从视图访问viewmodel中的datagrid控件?
大家好,我想在我的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
<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中为每列指定任意数量的单个道具。仍将显示额外的列?当然,您可以仅为根据条件可以隐藏的列指定可见性绑定。您可以指定任意数量的单个