C#XAML Setter值为True,具体取决于字符串属性值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#XAML Setter值为True,具体取决于字符串属性值相关的知识,希望对你有一定的参考价值。
我遇到的麻烦似乎是一项相当简单的任务。我有一个带有节点的树视图,如果我的View Model的特定字符串属性'SearchTerm'不为空,我想将整个树视图的TreeViewItem'IsExpanded'属性设置为True。换句话说,如果string属性不为null,则IsExpanded值应为True。我已经在codebehind中完成了这个,但我更喜欢在XAML中这样做以保持清洁。
为了描述下面的代码,我创建了一个转换器,它将空字符串转换为'False',将非null转换为'True'。在我的XAML中,当我尝试从TreeView ItemContainerStyle中的viewmodel绑定字符串值时,我调用此转换器。似乎转换器从未被解雇过。
我的XAML(简化):
<UserControl.Resources>
<cv:ExpandNodesIfSearchConverter x:Key="ExpandAll">
</cv:ExpandNodesIfSearchConverter>
</UserControl.Resources>
<TreeView Grid.Row="2" x:Name="myTreeView"
ItemsSource="{Binding Sponsors}"
SelectedItemChanged="TreeView_SelectedItemChanged" >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<!-- if SearchTerm is not null, use converter to set value to true and expand all nodes -->
<Setter Property="IsExpanded" Value="{Binding Path=SearchTerm, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ExpandAll}}" />
</Style>
</TreeView.ItemContainerStyle>
<!-- TreeView data -->
</TreeView>
我的视图模型:
public class TreeViewVM : INotifyPropertyChanged
{
private string _searchterm;
public string SearchTerm
{
get
{
return _searchterm;
}
set
{
_searchterm = value;
OnPropertyChanged("SearchTerm");
}
}
}
我的转换器:
class ExpandNodesIfSearchConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//if searchterm is not null, return true to expand all items, otherwise return false
string searchterm = value.ToString();
if (string.IsNullOrEmpty(searchterm))
return false;
else
return true;
}
public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
答案
我通过在Setter标记中使用ElementName而不是viewmodel属性解决了我的问题。 searchTxt是SeachTerm绑定的TextBox的名称。
<Setter Property="IsExpanded" Value="{Binding ElementName=searchTxt, Path=Text, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ExpandAll}}" />
以上是关于C#XAML Setter值为True,具体取决于字符串属性值的主要内容,如果未能解决你的问题,请参考以下文章
有关js 的 defineProperty函数 getter setter