gpt4 book ai didi

c# - MVVM - 如何将 HierarchicalDataTemplate 项的可见性绑定(bind)到 ViewModel 字段

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:52 25 4
gpt4 key购买 nike

我有一个 HierarchicalDataTemplate,它包含许多项目并且在每个项目旁边都有一个小图像。我要绑定(bind)的是这些图像的可见性。项目的图像是否可见取决于该项目是否出现在服务器上的 DataTable 中。

为了确定一个项目的可见性,我需要该项目的 ID 号和访问服务器的接口(interface)。该接口(interface)作为一个字段保存在 ViewModel 中。

理想情况下,如果我可以根据项目的 ID 进行绑定(bind),我会在我的 ViewModel 中使用此方法:

public Visibility ItemIsInTable(int ID)
{
string sql = "SELECT ID FROM MyTable WHERE ID = " + ID;
DataTable dataTable = serverInterface.FetchDataFromDatabase(sql);

if (dataTable.Rows.Count > 0)
return Visibility.Visible;
else
return Visibility.Collapsed;
}

我的绑定(bind)如何依赖于项目 ID 和我的 ViewModel 接口(interface)?

最佳答案

您的 ViewModel 属性应该是 bool 值,并且您将使用转换器。

public bool ItemIsInTable {get { ... } set { ...; OnPropertyChanged("ItemIsInTable"); }}

[编辑]

好的。你必须有一个 ObservableColletction 的项目(在我的例子中 ItemsSource)

class ItemSource: INotifyPropertyChanged 
{
public int Id {get { ... } set { ...; OnPropertyChanged("Id"); }}
public bool ItemIsInTable {get { ... } set { ...; OnPropertyChanged("ItemIsInTable"); }}
....
}

在您的 ViewModel 中:

ObservableColletction<ItemSource> ItemsSource  {get { ... } set { ...; OnPropertyChanged("ItemsSource"); }}

现在你应该验证Id

foreach(var item in ItemsSource)
item.ItemIsInTable = MethodToVerifyIdInDataBase(item.Id);

[/编辑]

像这样的 XAML:

<HierarchicalDataTemplate ItemsSource="{Binding ItemSource}"   >
<Grid Visibility="{Binding ItemIsInTable, Converter={StaticResource BoolToVisibilityConverter}}" >
....
</Grid>
</HierarchicalDataTemplate>

App.Xaml:

<converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>

转换器类:

public class BoolToVisibilityConverter: IValueConverter 
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var rv = Visibility.Visible;
try
{
if (value != null)
rv = (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
catch
{
// ignored
}
return rv;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value != null) && (value == (object)Visibility.Visible);
}
}

关于c# - MVVM - 如何将 HierarchicalDataTemplate 项的可见性绑定(bind)到 ViewModel 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44457538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com