Сегодня я использую конструктор для получения массива, а затем привязываю его к элементу.Рефакторинг создания привязки от кода-основанного на основе XAML
C#
public MyDialog(Stuff stuff, IEnumerable<Thing> things)
{
InitializeComponent();
DataContext = stuff;
MyComboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding { Source = things });
ShowDialog();
}
XAML
<ComboBox x:Name="MyComboBox"
DisplayMemberPath="Canonic"
Style="{StaticResource DefaultComboBoxStyle}" />
Я хотел бы, чтобы реорганизовать его в чисто XAML подход, основанный и я подошел к нему следующим образом. Тем не менее, я не получаю никаких значений в своем поле со списком, и я очень не уверен, как это сделать.
<ComboBox x:Name="MyComboBox"
ItemsSource="{Binding
RelativeSource={
RelativeSource FindAncestor,
AncestorType={x:Type Window}},
Path=DataContext.TheActualThings}"
DisplayMemberPath="Canonic"
Style="{StaticResource DefaultComboBoxStyle}" />-->
Конечно, класс Вещи содержит ряд полей, один из которых называется CANONIC и содержит строку для визуализации в описании опции. Элемент управления, создающий диалог, имеет тип ProgramWindow от Окно.
Обратите внимание, что есть аналогичный вопрос (как может показаться), но разница в том, что в другом случае у меня была проблема синтаксиса, и после того, как это было разрешено, существует настоящая техническая проблема, описанная здесь. (Я не даю ссылку на другой вопрос, потому что я предпочитаю не влияет на количество просмотров на нем.)
public partial class ProgramWindow : Window
{
public ProgramWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
private void DataGridRow_OnDoubleClick(Object sender, MouseButtonEventArgs eventArgs)
{
MyDialog dialog = new MyDialog(
(sender as DataGridRow).Item as Stuff,
(DataContext as ViewModel).TheActualThings);
if (dialog.DialogResult ?? false) ...
else ...
}
}
Пожалуйста, предоставьте код для 'MainWindow.cs' или' ProgramWindow.cs', чтобы немного разобраться. –
@Bahman_Aries Я сделаю это. Однако, чтобы держать вещи плотными и читаемыми, я хотел бы только опубликовать соответствующие части. Что именно вам нужно увидеть из кода? Я опубликую конструктор и создаю диалог. Дайте мне знать, слишком ли много или слишком мало. –