【问题标题】:ListView Multibinding?ListView 多重绑定?
【发布时间】:2015-12-11 11:25:47
【问题描述】:

我和一个朋友正在创建我们自己的 Skype"ish" 应用程序作为一个有趣的小项目。

我们现在已经到了要创建联系人列表的地步。

我们的每个联系人都包含以下内容:

<ListView Grid.Column="0" x:Name="ContactList" BorderBrush="#FF252525" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
              ScrollViewer.VerticalScrollBarVisibility="Hidden" Grid.Row="0" Grid.RowSpan="3" ItemsSource="{Binding Path=ContactNameList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Grid>
                        <TextBlock Text="NameOfContact" Padding="7,5,0,10" FontSize="16" />
                        <TextBlock Text="JobTitle" Padding="7,25,0,0" FontStyle="Italic" Foreground="#FF8D8D8D" />
                        <Ellipse Fill="#FF00FF00" Width="14" Height="14" Margin="132,18,14,18" HorizontalAlignment="Right" />
                    </Grid>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

但问题来了,我们有 3 个 observablecollections

  • 联系人姓名列表
  • 联系人标题列表
  • 联系人状态列表

现在,我知道如何进行简单的绑定,但我不知道如何对一个 ListView 进行 3 次绑定。我看过一些 Multibindings 的例子,但找不到一个展示如何设置源(应该显示的数据)的例子。

所以问题是,我怎样才能使模板看起来像这样? (当然是理论上的约束!):

<ListView Grid.Column="0" x:Name="ContactList" BorderBrush="#FF252525" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
              ScrollViewer.VerticalScrollBarVisibility="Hidden" Grid.Row="0" Grid.RowSpan="3" ItemsSource="{Binding Path=ContactNameList,ContactTitleList,ContactStatusList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Grid>
                        <TextBlock Text="{Binding Path=ContactNameList}" Padding="7,5,0,10" FontSize="16" />
                        <TextBlock Text="{Binding Path=ContactTitleList}" Padding="7,25,0,0" FontStyle="Italic" Foreground="#FF8D8D8D" />
                        <Ellipse Fill="#FF00FF00" Width="14" Height="14" Margin="132,18,14,18" HorizontalAlignment="Right" />
                    </Grid>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

对于任何想知道的人,this 是联系人的显示方式。我真正想要的只是让文本和日食有机会与他们的列表相对应。

编辑:致@Kirenenko

public class ContactsClass : INotifyPropertyChanged {

    public ContactsClass() {

    }

    public ObservableCollection<ContactsClass> contacts = new ObservableCollection<ContactsClass>();

    string[] Name = new string[2];
    string[] Title = new string[2];
    string[] Status = new string[2];

    public event PropertyChangedEventHandler PropertyChanged;
}

【问题讨论】:

  • 真的有必要有3个列表吗?为什么你没有 1 个联系人列表,联系人是一个有名字、头衔和状态的类?
  • 没必要,我只是不知道如何像你解释的那样创建一个列表:)
  • 你必须创建 1 个像 ObservableCollection&lt;Contact&gt; contacts = new ObservableCollection&lt;Contact&gt;(); 这样的可观察集合。您必须使用 3 个字符串定义您的 Contact 类:nametitlestatus
  • 但是我能问一下 XAML 代码的外观吗?我将如何将 name 绑定到顶部 TextBlock 而不会将相同的文本复制到第二个 TextBlock 中?
  • 您必须将列表的 itemsource 绑定到 ObservableCollection,然后将文本框绑定到 contact 内的相应属性。

标签: c# wpf xaml multibinding


【解决方案1】:

我相信你应该拥有的不是三个列表,而是一个在其节点中包含用户所有相关信息的列表。

喜欢:

<users>
<user>
<ContactName></ContactName>
<ContactTitle></ContactTitle>
<ContactStatus></ContactStatus>
</user>
</users>

【讨论】:

  • 别担心我的朋友,我对 XAML 的经验不是很丰富,所以我在这方面不是最聪明的。据我了解,这可以工作,但我将如何将它与当前的 DataTemplate 合并以及我已经拥有的东西我不完全确定如何实现它:)
猜你喜欢
  • 2011-04-03
  • 1970-01-01
  • 2011-07-27
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 2011-08-30
相关资源
最近更新 更多