Qual é a diferença entre o seguinte:
Todas essas propriedades de dependência são definidas na classe Selector . Costumo confundir SelectedItem
com SelectedValue
e SelectedValue
com SelectedValuePath
.
Gostaria de saber a diferença entre eles e também quando os usamos, especialmente SelectedValue
e SelectedValuePath
. Por favor, explique seu uso com alguns exemplos simples.
Respostas:
Seus nomes podem ser um pouco confusos :). Aqui está um resumo:
A propriedade SelectedItem retorna o objeto inteiro ao qual sua lista está vinculada. Digamos que você vinculou uma lista a uma coleção de
Category
objetos (com cada objeto Categoria com propriedades Nome e ID). por exemplo.ObservableCollection<Category>
. ASelectedItem
propriedade retornará oCategory
objeto selecionado no momento . Para fins de ligação, no entanto, isso nem sempre é o que você deseja, pois isso só permite vincular um objeto Category inteiro à propriedade à qual a lista está vinculada, e não o valor de uma única propriedade nesse objeto Category (como suaID
propriedade )Portanto, temos a propriedade SelectedValuePath e a propriedade SelectedValue como um meio alternativo de ligação (você as utiliza em conjunto). Digamos que você tenha um
Product
objeto ao qual sua visualização esteja vinculada (com propriedades para itens como NomeDoProduto, Peso etc.). Digamos também que você tenha umaCategoryID
propriedade nesse objeto Produto e deseje que o usuário possa selecionar uma categoria para o produto em uma lista de categorias. Você precisa que a propriedade ID do objeto Categoria seja atribuída àCategoryID
propriedade no objeto Produto. É aqui que oSelectedValuePath
e oSelectedValue
as propriedades entram. Você especifica que a propriedade ID no objeto Categoria deve ser atribuída à propriedade no objeto Produto que a lista está vinculada a usarSelectedValuePath='ID'
e, em seguida, vincula aSelectedValue
propriedade à propriedade no DataContext (ou seja, o Produto).O exemplo abaixo demonstra isso. Temos uma ComboBox vinculada a uma lista de categorias (via ItemsSource). Estamos vinculando a propriedade CategoryID no produto como o valor selecionado (usando a propriedade SelectedValue). Estamos relacionando isso à propriedade ID da categoria por meio da propriedade SelectedValuePath. E estamos dizendo apenas exibir a propriedade Name na ComboBox, com a propriedade DisplayMemberPath).
É um pouco confuso inicialmente, mas espero que isso torne um pouco mais claro ... :)
Chris
fonte
Para responder um pouco mais conceitualmente:
SelectedValuePath
define qual propriedade (pelo nome) dos objetos vinculados aos ListBoxItemsSource
será usada como itemSelectedValue
.Por exemplo, se a sua listagem está vinculado a uma coleção de
Person
objetos, cada um dos quais temName
,Age
eGender
propriedades,SelectedValuePath=Name
fará com que o valor do selecionadoPerson
daName
propriedade a ser devolvido nosSelectedValue
.Observe que, se você substituir o ControlTemplate do ListBox (ou aplicar um estilo) que especifique qual propriedade deve ser exibida,
SelectedValuePath
não poderá ser usado.SelectedItem
, enquanto isso, retorna todo oPerson
objeto selecionado no momento.(Veja mais um exemplo do MSDN , usando o TreeView)
Atualizar: Como apontou @Joe, a propriedade DisplayMemberPath não está relacionada às propriedades Selected *. Sua descrição adequada é a seguinte:
Observe que esses valores são diferentes de
DisplayMemberPath
(que é definido no ItemsControl, não no Selector), mas essa propriedade possui um comportamento semelhante aoSelectedValuePath
: na ausência de um estilo / modelo, identifica qual propriedade do objeto vinculado ao item deve ser usada como sua representação de string.fonte
SelectedItem
é umobject
.SelectedValue
eSelectedValuePath
sãostring
s.por exemplo, usando o ListBox:
se você me der
listbox1.SelectedValue
, retornará o texto do item atualmente selecionado.se você me der,
listbox1.SelectedItem
isso lhe dará todo o objeto.fonte
SelectedValue
também é umobject
e não umstring
. Pls veja aquiinspirado por esta pergunta, escrevi um blog junto com o trecho de código aqui . Abaixo estão alguns trechos do blog
SelectedItem - Item Selecionado ajuda a vincular o valor real do DataSource que será exibido. Este é do tipo objeto e podemos vincular qualquer tipo derivado do tipo de objeto a essa propriedade. Como usaremos a ligação MVVM para nossas caixas de combinação, nesse caso, essa é a propriedade que podemos usar para notificar à VM que o item foi selecionado.
SelectedValue e SelectedValuePath - Essas são as duas propriedades mais confusas e mal interpretadas da caixa de combinação. Mas essas propriedades são resgatadas quando queremos vincular nossa caixa de combinação com o valor do objeto já criado. Verifique meu último cenário na lista a seguir para ter uma breve idéia sobre as propriedades.
fonte
Todo controle que usa Coleções para armazenar dados possui a propriedade SelectedValue, SelectedItem. Exemplos desses controles são ListBox, Dropdown, RadioButtonList, CheckBoxList.
Para ser mais específico, se você deseja literalmente recuperar o texto do item selecionado, pode escrever:
Seu ListBox1 também pode retornar Texto usando a propriedade SelectedValue se o valor já tiver sido definido antes. Mas acima, é uma maneira mais eficaz de obter texto.
Agora, o valor é algo que não é visível para o usuário, mas é usado principalmente para armazenar no banco de dados. Não inserimos o texto do ListBox1, no entanto, também podemos inseri-lo, mas costumávamos inserir o valor do item selecionado. Para obter valor, podemos usar
Fonte
fonte