C# Listview项目中的UWP按钮
我正在开发我的第一个UWP应用程序,我想创建一个这样的UI。每个列表项(项目)都有一组按钮。对于某些列表项(项目),某些按钮有时会被禁用。因此,我需要禁用和更改这些列表项(项目)中此类按钮的图像 我尝试使用这样的列表视图来实现它。但我不确定如何根据情况启用/禁用其中一些按钮 尝试添加DataContextChanged事件并尝试访问其中的按钮。但我不知道我如何才能访问这些按钮 请让我知道以下方法是否正确,或者是否有更好的方法来实现我在上图中试图实现的目标C# Listview项目中的UWP按钮,c#,xaml,listview,uwp,uwp-xaml,C#,Xaml,Listview,Uwp,Uwp Xaml,我正在开发我的第一个UWP应用程序,我想创建一个这样的UI。每个列表项(项目)都有一组按钮。对于某些列表项(项目),某些按钮有时会被禁用。因此,我需要禁用和更改这些列表项(项目)中此类按钮的图像 我尝试使用这样的列表视图来实现它。但我不确定如何根据情况启用/禁用其中一些按钮 尝试添加DataContextChanged事件并尝试访问其中的按钮。但我不知道我如何才能访问这些按钮 请让我知道以下方法是否正确,或者是否有更好的方法来实现我在上图中试图实现的目标 <ListView x:Name
<ListView x:Name="stepsListView" Margin="10,0,0,0" RequestedTheme="Dark" FontSize="24" Background="{StaticResource procedure_app_white}" Foreground="Black" BorderThickness="1.5" BorderBrush="Transparent" ItemsSource="{Binding projectList}" HorizontalAlignment="Left">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<!-- Item -->
<ListView.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,0,0,1" BorderBrush="#c0c0c0">
<Grid Width="auto" HorizontalAlignment="Stretch" DataContextChanged="Grid_DataContextChanged" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" FontSize="30" Grid.Row="0" Grid.ColumnSpan="7" Text="{Binding projectName}" Foreground="{StaticResource procedure_app_orange_text }" />
<Button x:Name="warningButton" Width="40" Height="40" Grid.Column="1" Grid.Row="1" Tag="{Binding projectId}" Click="warningButtonClick" Foreground="{StaticResource procedure_app_orange_text }">
<Button.Background>
<ImageBrush ImageSource="Asset/step_ncwr.png">
</ImageBrush>
</Button.Background>
</Button>
<Button x:Name="commentButton" Width="40" Height="40" Grid.Column="2" Grid.Row="1" Tag="{Binding projectId}" Click="CommentButtonClick" Foreground="{StaticResource procedure_app_orange_text }" IsTapEnabled="True">
<Button.Background>
<ImageBrush ImageSource="Asset/step_comment.png">
</ImageBrush>
</Button.Background>
</Button>
<Button x:Name="imageButton" Width="40" Height="40" Grid.Column="3" Grid.Row="1" Tag="{Binding projectId}" Click="ImageButtonClick" Foreground="{StaticResource procedure_app_orange_text }">
<Button.Background>
<ImageBrush ImageSource="Asset/step_image.png">
</ImageBrush>
</Button.Background>
</Button>
</Grid>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
答案是变量取决于您所采用的结构,因此我将做一些假设,然后继续 首先,我假设您的
ViewModel
有一个名为ProjectList
的observeCollection
,这个ProjectList
由ProjectModel
组成
ProjectModel.cs
public class ProjectModel : INotifyPropertyChanged{
private bool _isNcwrEnabled;
public bool IsNcwrEnabled{
get{ return _isNcwrEnabled; }
set{ _isNcwrEnabled = value; OnPropertyChanged("IsNcwrEnabled"); }
}
private bool _isCommentEnabled;
public bool IsCommentEnabled{
get{ return _isCommentEnabled; }
set{ _isCommentEnabled= value; OnPropertyChanged("IsCommentEnabled"); }
}
private bool _isImageEnabled;
public bool IsImageEnabled{
get{ return _isImageEnabled; }
set{ _isImageEnabled= value; OnPropertyChanged("IsImageEnabled"); }
}
public void OnPropertyChanged(String prop)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
在您的视图模型中
应该
ObservableCollection<ProjectModel> ProjectList {get; private set; }
变更摘要
列表视图
的集合中的模型需要包含要绑定到的按钮的已启用属性
视图中
,将按钮
绑定到新属性非常感谢安东尼的详细回答。因此,如果我想在禁用时更改图像。我需要在ProjectModel中定义另一个属性,如ncwrImage,并根据条件设置图像,并在ImageBrush中设置ImageSource=“{Binding ncwrImage}”。对吗?如果你想更改图像,我会创建一个数据触发器,根据模型的启用状态切换图像源property@Madhu如果这个答案对你有效,请不要忘记勾选并投票,这样其他人可以使用它。汉克斯·安东尼,我将把这个标记为答案。但我仍然找不到一个方法来做这两件事
1。如何使用绑定隐藏某些按钮。看起来我需要设置可见性=折叠。但我不知道怎么用我的枪。我试过这个,但它似乎对uwp不起作用
2。如何在上述代码中使用该bool更改ImageBrush ImageSource。我查看了您提供的链接,但这些样式触发器在uwp中不受支持:-(我按照你的建议增加了一个新问题
<Button IsEnabled="{Binding IsNcwrEnabled}" x:Name="warningButton" Width="40" Height="40" Grid.Column="1"
Grid.Row="1" Tag="{Binding projectId}" Click="warningButtonClick"
Foreground="{StaticResource procedure_app_orange_text }">
<Button.Background>
<ImageBrush ImageSource="Asset/step_ncwr.png"/>
</Button.Background>
</Button>
<Button IsEnabled="{Binding IsCommentEnabled}" x:Name="commentButton" Width="40" Height="40" Grid.Column="2"
Grid.Row="1" Tag="{Binding projectId}" Click="CommentButtonClick"
Foreground="{StaticResource procedure_app_orange_text }" IsTapEnabled="True">
<Button.Background>
<ImageBrush ImageSource="Asset/step_comment.png"/>
</Button.Background>
</Button>
<Button IsEnabled="{Binding IsImageEnabled}" x:Name="imageButton" Width="40" Height="40" Grid.Column="3"
Grid.Row="1" Tag="{Binding projectId}" Click="ImageButtonClick"
Foreground="{StaticResource procedure_app_orange_text }">
<Button.Background>
<ImageBrush ImageSource="Asset/step_image.png"/>
</Button.Background>
</Button>