Где хранить поле идентификатора в Silverlight - PullRequest
0 голосов
/ 30 апреля 2010

Я пытаюсь использовать шаблон MVVM, и мне интересно, где я размещаю значение идентификатора. Создать ли TextBlock, у которого свойство видимости установлено как свернутое? Или есть лучшее место для хранения таких данных? В настоящее время параметр команды установлен на:

CommandParameter="{Binding ElementName=Name,Path=Text}"

Но я бы предпочел, чтобы это было что-то вроде:

CommandParameter="{Binding ElementName=Id,Path=Text}"

Я полностью готов к предложениям о том, как лучше всего это сделать, так как я новичок в этом шаблоне и языке презентации.

<ListBox x:Name="MyListBox" ItemsSource="{Binding MyData, Mode=TwoWay}" BorderThickness="0">        
    <ListBox.ItemTemplate>                
        <DataTemplate>
             <StackPanel Orientation="Horizontal">
                 <CheckBox x:Name="Visible" IsChecked="{Binding Visible, Mode=TwoWay}" Command="{Binding ElementName=MyListBox, Path=DataContext.MyCommand}" CommandParameter="{Binding ElementName=Name,Path=Text}" />
                 <TextBlock Text="{Binding Name}" />
              </StackPanel>  
               </DataTemplate>
    </ListBox.ItemTemplate>            
</ListBox>

РЕДАКТИРОВАТЬ: вариант 1

<CheckBox x:Name="Visible" IsChecked="{Binding Visible, Mode=TwoWay}" Command="{Binding ElementName=MyListBox, Path=DataContext.MyCommand}" CommandParameter="{Binding Id}" />

Эта опция дает мне только Id, который полезен во многих ситуациях.

РЕДАКТИРОВАТЬ: Вариант 2

   <CheckBox x:Name="Visible" IsChecked="{Binding Visible, Mode=TwoWay}" Command="{Binding ElementName=MyListBox, Path=DataContext.MyCommand}" CommandParameter="{Binding}" />

Эта опция дает мне полную модель, которая еще более полезна для моей конкретной ситуации.

1 Ответ

1 голос
/ 30 апреля 2010

То, что вы хотите сделать, это оставить свой идентификатор в объекте данных, который находится в вашей исходной коллекции элементов. Просто привяжите отдельный элемент к панели стека для каждого элемента в списке пользовательского интерфейса:

<StackPanel Orientation="Horizontal" DataContext="{Binding}"> 
    <CheckBox x:Name="Visible" IsChecked="{Binding Visible, Mode=TwoWay}" Command="{Binding ElementName=MyListBox, Path=DataContext.MyCommand}" CommandParameter="{Binding ElementName=Name,Path=Text}" /> 
    <TextBlock Text="{Binding Name}" /> 
</StackPanel>

Обратите внимание на DataContext = "{Binding}". Этот синтаксис связывает весь объект элемента со свойством, а не со свойством объекта. Теперь в любом программном коде, который у вас есть для флажка и т. Д., У вас будет ссылка на флажок, вы можете перейти к родительской панели стека, получить доступ к свойству DataContext, которое будет иметь ссылку на элемент в вашей коллекции, из их только что полученного Идентификатор.

Отличительной особенностью привязок WPF / Silverlight является то, что вам не нужно выставлять / связывать данные в пользовательском интерфейсе, который вам не нужен, видимый пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...