我有一个带有列表框的窗口,以及一个绑定到列表框所选项目的usercontrol详细信息'view'。默认情况下,列表框中没有选择任何内容(据我所知,这是默认行为,这里没什么特别的)。
我想要做的是在列表框中没有选择任何内容时显示某种消息(而不是,但在与详细信息视图相同的位置)。
这是代码,我一直试图将其缩小到尽可能小的范围,因此删除了大部分的MVVM / ViewModel / NotifyPropertyChanged。
我将从窗口开始:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<ListBox Grid.Column="0" Name="ListList"></ListBox>
<view:BoundItem Grid.Column="1" DataContext="{Binding ElementName=ListList, Path=SelectedItem}" ></view:BoundItem>
</Grid>
绑定的项只会回显一些属性:
<Grid>
<StackPanel Orientation="Vertical">
<TextBox Text="{Binding Foo, Mode=OneWay}"></TextBox>
<TextBox Text="{Binding Bar, Mode=OneWay}"></TextBox>
<TextBox Text="{Binding Baz, Mode=OneWay}"></TextBox>
</StackPanel>
</Grid>
我正在设置填充列表框并一次性定义数据项目:
/// <summary>
/// Interaction logic for ListBoxSelectedItemBinding.xaml
/// </summary>
public partial class ListBoxSelectedItemBinding : Window
{
public ListBoxSelectedItemBinding()
{
InitializeComponent();
this.ListList.Items.Add(new ListBoxData());
this.ListList.Items.Add(new ListBoxData());
this.ListList.Items.Add(new ListBoxData());
}
}
public class ListBoxData
{
public string Foo
{
get
{
return "Foo";
}
}
public string Bar
{
get
{
return "FooBar";
}
}
public string Baz
{
get
{
return "FooBarBaz";
}
}
}
当应用程序启动时,没有选择任何内容,我在左侧看到列表框,在右侧看到3个空文本框。一旦我选择了某些内容,就会填充三个文本框。
我想要的是完全隐藏,直到某些东西被选中。我想我可以使用Binding TargetNullValue或FallBackValue来绑定一个默认项目 - 这不是我想要的。更重要的是,我希望完全隐藏并用其他东西替换它(假设一个按钮,只是为了给出一个想法)。
我认为这里没有任何复杂的东西。我已经搜索了答案,但我只是在列表框绑定,选定项目等方面淹没了略微相关的主题。
答案 0 :(得分:2)
您可以处理可见性属性,并在SelectedItem等于null并同时显示后者时隐藏一个Panel。
隐藏TextBoxes网格:
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=ListList, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<TextBox/>
<TextBox/>
<TextBox/>
</Grid>
并显示您的按钮网格
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=ListList, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Button/>
<Button/>
<Button/>
</Grid>
请记住,他们需要放在同一个地方(例如同一列和行)。在处理可见性时更加软化的方法是使用 ContentControl ,它将根据ViewModel更改自动更改View。更多here。