Xaml - 组合框 - 为什么selectedValue不适用于多列?

时间:2013-08-13 00:34:17

标签: wpf xaml combobox

嗨,谢谢你的帮助。

以下xaml工作正常:

<ComboBox Name="cboCit_type"
  IsSynchronizedWithCurrentItem="True"    
  mvvm:View.FlowsWithPrevious="True"
  ItemsSource="{Binding Path=cuCodeInfo.CitTypes}"
  SelectedValuePath="code" 
  DisplayMemberPath="code" 
  Text="{Binding cit_type}"
  IsEditable="true"
  IsReadOnly="false"
  SelectedValue="{Binding Path=cit_type}">
</ComboBox>

cuCodeInfo.CitTypes只是可用项目的列表。有许多公共财产,但有问题的2是“代码”和“描述”。

现在,我显示可用的代码值,用户选择一个。如果已经选择了一个,则显示页面显示的时间。这一切都很好。

那么我认为展示代码和描述可能会很好。我认为这不应该太难......

所以我删除了DisplayMemberPath语句并添加到ItemTemplate中。

当我这样做时,一切看起来都很棒,直到我尝试从列表中选择一个项目。当我这样做,而不是显示所选代码,我会得到一个空字符串。我已经搜索了互联网,试图找到我需要添加到DataTemplate来解决这个问题的一件事,但我尝试过的一切都失败了。这是不起作用的代码:

<ComboBox Name="cboCit_type"
  IsSynchronizedWithCurrentItem="True"    
  mvvm:View.FlowsWithPrevious="True"
  ItemsSource="{Binding Path=cuCodeInfo.CitationTypes}"
  SelectedValuePath="code" 
  Text="{Binding cit_type}"
  IsEditable="true"
  IsReadOnly="false"
  SelectedValue="{Binding cit_type}">

  <ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal" >
            <Border BorderThickness="0,0,1,0" BorderBrush="Black">
                <TextBlock Text="{Binding Path=code}" mvvm:View.WidthEx="2" ></TextBlock>
            </Border>
            <TextBlock Text="{Binding Path=description}" mvvm:View.WidthEx="15" Margin="1" ></TextBlock>
        </StackPanel>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

非常感谢任何帮助。

顺便说一句,我必须以多种形式使用这种完全相同的格式(相同的列表,等等,只是不同的SelectedValue) - 所以如果你想在xaml中建议最好的方法,那就太好了。在我的前xaml时代,我只会创建一个控件,设置一个属性或2,并在我的所有表单中使用它。但是我应该使用xaml,所以我不确定最好的方法。

谢谢!

2 个答案:

答案 0 :(得分:2)

我无法相信我在网上搜索找到答案,直到现在,找不到答案。答案就像我想的那样容易。

只需更换:   的DisplayMemberPath = “代码” 同   TextSearch.TextPath = “代码” 并且代码工作得很好。

感谢所有帮助过的人。

答案 1 :(得分:1)

我可以告诉您如何使用SelectedItem

  

视图模型

public class ViewModel
    {
        public ViewModel()
        {
            //Suppose your collection CitTypes is Initialized and filled with there Items
            //Now you can set first Element as selected in ComboBox 
            SelectedItem = CitTypes.FirstOrDefault();
        }

        CitType selectedItem;
        public CitType SelectedItem
        {
            get { return selectedItem; }
            set { selectedItem = value; RaisePropertyChanged("SelectedItem"); }
        }
    }
  

XAML

<ComboBox Name="cboCit_type"
IsSynchronizedWithCurrentItem="True"    
mvvm:View.FlowsWithPrevious="True"
ItemsSource="{Binding Path=cuCodeInfo.CitationTypes}"
Text="{Binding cit_type}"
IsEditable="true"
IsReadOnly="false"
**SelectedItem="{Binding SelectedItem}"**>