wpf深度属性与条件的数据绑定

时间:2016-11-23 12:26:16

标签: c# wpf listview

我正在尝试在列表视图中显示属性。我的问题是我要显示的数据比我的ItemSource要深得多,它只应该只显示具有特定值的属性。

这是一个例子:

        <ListView x:Name="listView"ItemsSource="{Binding Items}">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Tags.Data.Text}"/>
            </GridView>
        </ListView.View>
    </ListView>

现在我想尝试制作这样的东西

namespace console\controllers;
use yii\console\Controller;
/**
 * Job controller
 */
class JobController extends Controller {

public function actionIndex() {
    echo "cron service runnning";
    mail("mail@gmail.com","Cron",'Testing');
}

}

但是现在我希望它只显示一个带有特定ID的标签而不是所有标签。 而Items是一个ObservableCollection。

1 个答案:

答案 0 :(得分:0)

我为你提出了两个解决方案。

1)看看是否有效:

<ListView x:Name="listView"ItemsSource="{Binding Items}">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Tags.Data.Text}"/>
            </GridView>
        </ListView.View>
</ListView>

如果这不起作用,让我们重构您的代码并使用WPF功能......

2)替代解决方案

在ViewModel中设置如下属性:

public Tag SelectedTag 
{
  get {...}; 
  set 
    {  
        _selectedTag = value ;
        SelectedData = value!=null?_selectedTag.Data:null;
        //call notifypropertychanged here...    
    }
}; 

public Data SelectedData {get {...}; set {....}};

所以在你的ListView中,做一个像这样的绑定:

<ListView x:Name="listView" 
       ItemsSource="{Binding Items}"
       SelectedItem={Binding SelectedTag, Mode=TwoWay, UpdateSourceTrigger="ProperyChanged">
   <ListView.View>
        <GridView>
             <GridViewColumn DisplayMemberBinding="{Binding Path=DataContext.SelectedData.Text,ElementName="YourWindowName"}"/>
        </GridView>
    </ListView.View>
</ListView>