【发布时间】:2015-04-18 18:49:45
【问题描述】:
我正在尝试根据 WPF 数据网格中不同列中的下拉菜单在数据网格的堆栈面板中显示文本框或按钮。下面是基本代码。实际实现将绑定值绑定到每个字段的数据源。寻找一种简单优雅的方法来根据下拉列表中的选定值设置文本框和按钮的可见性。任何帮助表示赞赏:
<Grid Name="dg1">
<DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="500" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Height="30">
<TextBox Name="tbName" Width="100" />
<Button Name="btn1" Content="ADD ME" Width="100" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Choice" Width="150" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="combo1" >
<ComboBoxItem Content="ShowButton" />
<ComboBoxItem Content="ShowText" />
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
我有一个答案... 在分析了第一个回复后能够拼凑出以下解决方案
XAML
<Window.Resources>
<local:ChoiceToVisibilityConverter x:Key="choice2visibilityConverter" />
<local:ChoiceList x:Key="ChoiceList" />
</Window.Resources>
<Grid Name="dg1">
<DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="500" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Height="30">
<TextBox Name="tbName" Width="100" Visibility="{Binding Choice, Converter={StaticResource choice2visibilityConverter},ConverterParameter=TextBox} />
<Button Name="btn1" Content="ADD ME" Width="100" Visibility="{Binding Choice, Converter={StaticResource choice2visibilityConverter},ConverterParameter=TextBox} />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Choice" Width="150" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="combo1"
SelectedValue="{Binding Choice, NotifyOnSourceUpdated=True,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{StaticResource ChoiceList }"
>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
C#代码:
public class ChoiceToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.ToString().CompareTo("ShowText") == 0)
return Visibility.Visible ;
return Visibility.Hidden ;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
public class ChoiceList : List<string>
{
public ChoiceList()
{
this.Add("ShowText");
this.Add("ShowButton");
}
}
【问题讨论】:
标签: c# wpf datagrid visibility