Saj*_*v C 9 c# xaml mvvm microsoft-metro windows-phone-8.1
我有两个按钮 - 按钮A和按钮B.两个按钮最初都是隐藏的.数据来自Observable Collection OCollection.
这就是我想要实现的目标:
1)最初,两个按钮都被隐藏.(完成)
2)在第一次单击(单击任何列表视图项)时,应使按钮A可见.(完成)
3)在其余的点击上(单击任何其他列表视图项目,而不是按钮A保持可见的项目),应使按钮B可见.按钮A的可见性不应改回Collapsed.
注意:每个Listview项必须只包含一个Button(按钮A或按钮B).
OCollection被设置为ListView的ItemSource.每个ListView项都是一个包含默认图像的网格.
XAML:
<ListView Name="lv"
ItemsSource="{Binding OCollection}"
Background="Linen"
Grid.ColumnSpan="3">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Background="LightGray" Name="buttonGrid" Tag="{Binding dumyString}">
<i:Interaction.Behaviors>
<ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="Equal">
<ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Visible" />
</ic:DataTriggerBehavior>
<ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="NotEqual">
<ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Collapsed" />
</ic:DataTriggerBehavior>
<ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=buttonGrid.Tag}" Value="{Binding dumyString}" ComparisonCondition="Equal">
<ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonB}" PropertyName="Visibility" Value="Visible" />
</ic:DataTriggerBehavior>
</i:Interaction.Behaviors>
<Image Source="/Assets/Logo.png" />
<Button Name="ButtonA" Content="ButtonA" Background="Black" Visibility="Collapsed" />
<Button Name="ButtonB" Content="ButtonB" Background="Black" Visibility="Collapsed" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)
为了实现3,我将网格的标签与按钮内容进行比较.它不起作用,因为逻辑是错误的.那么,如何在不使用代码的情况下实现这一目标.我遵循MVVM模式,所以adios to Code背后.
样本会很好,因为我只是一个初学者.
类:
public class dumyClass
{
public string dumyString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我认为您可以在视图模型中订阅 CollectionChanged 事件,然后将按钮的可见性绑定到 bool 属性,并通过更改属性的值来处理您的事件。不要忘记 BooleanToVisibility 转换器。如果需要的话我可以给你一些代码示例。
这是:
public FooViewModel()
{
this.OCollection += this.OCollectionChanged;
}
private void OCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
var collection = sender as System.Collections.Generic.List<Bar>;
if (collection != null && collection.Count > 1)
{
this.IsButtonVisible = true;
base.RaisePropertyChanged(() => this.IsButtonVisible);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 MVVM,我希望您知道 RaisePropertyChanged 的含义,并且知道如何将按钮的可见性绑定到 bool 属性。如果您无法理解,请告诉我。
归档时间: |
|
查看次数: |
917 次 |
最近记录: |