早上好,我在客户服务器上的C#页面出现问题。 我的页面分为两部分:左侧有一个对象列表,而右侧有一个表,其中显示了所选对象的详细信息。在右侧显示的字段中,有一个指向用户可以下载的一个或多个文件(与对象有关)的链接。根据某些条件,我想阻止某些用户下载这些文件,只让他们看到文件名。
在xaml中,我创建了一个DataGrid来显示定义如下的对象的详细信息:
<DataGrid AutoGenerateColumns="False" Name="dgRPD" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" ItemsSource="{Binding ListRPD}" SelectedItem="{Binding SelectedRPD}" Height="Auto">
该列的代码如下:
<DataGridTemplateColumn Header="Files" Width="Auto" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<cc:FilePickerOnlyName CanChooseFile="False" FileName="{Binding Path=FileNameDoc}" FilePath="{Binding Path=PathDoc, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding hide, UpdateSourceTrigger=PropertyChanged}" DataContext="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我的想法是使用IsEnabled属性实现我的目标,如果将其设置为False,我就会理解。因此,我创建了一个属性“ hide”,定义如下:
private bool _hide;
public bool hide
{
get { return _hide; }
set
{
if (_hide != value)
{
_hide = value;
RaisePropertyChanged("hide");
}
}
}
要尝试这种方法,我会在ViewModel的初始化过程中将hide设置为false,并且每次在页面左侧更改所选对象并手动强制RaisePropertyChange进行隐藏时。 我尝试禁用字段时,在检索对象列表或对象详细信息时没有问题。我在google上搜索了isEnabled Binding的路径的所有变体,但没有任何效果。 我该如何解决?
答案 0 :(得分:0)
在同事的帮助下,我解决了这个问题;我将IsEnabled更改如下:
IsEnabled="{Binding ElementName=root, Path=ViewModel.hide}"
,并且在XAML开头的UserControl标记中,添加了以下几行:
xmlns:local="clr-namespace:[namespace of the ViewModel]"
x:Name="root"
,现在可以使用了。在回答@Blacktempel和@Juan Carlos Rodriguez的评论时,hide属性在ViewModel中被声明为公共布尔,但与左列的对象或页面右侧的对象的详细信息没有直接关系,因为在在这两种情况下,它们都是非常大而复杂的外部类的一部分,我无法访问或修改其源代码。我还想最小化使程序正常运行所需的更改。