Я пытаюсь создать текстовый предварительный просмотр пути к файлу, используя MultiBinding
в TextBlock
, но у меня возникла проблема. Что я хотел бы сделать, так это установить некоторые значения в некоторых элементах пользовательского интерфейса (одно поле со списком и одно текстовое поле) и увидеть, как предварительный просмотр заполняется в нижней части окна.
XAML предварительного просмотра
<Label Grid.Row="3" Grid.Column="0" Content="Preview:"/>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="P:\{0}\{1}\file.txt">
<Binding Path="SelectedStudio.Code"/>
<Binding Path="SelectedProject.ProjectCode"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
SelectedStudio и SelectedProject — это свойства в ViewModel
ViewModel.
public ObservableCollection<WbStudio> Studios { get; set; }
public static WbStudio SelectedStudio { get; set; }
public static WbProject SelectedProject { get; set; }
Объекты
public class WbProject
{
public string ProjectName { get; set; }
public string ProjectCode { get; set; }
public string ClientName { get; set; }
public string Address { get; set; }
}
и
public class WbStudio
{
public string Name { get; set; }
public string Code { get; set; }
}
Свойства ViewModel привязаны к другому разделу пользовательского интерфейса в верхней части окна
Setup XAML
<Label Content="Project Studio:"/>
<ComboBox ItemsSource="{Binding Studios, Mode=OneTime}" DisplayMemberPath="Code" SelectedValuePath="Code"
SelectedItem="{Binding SelectedStudio, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Label Content="Project Code:"/>
<TextBox Text="{Binding SelectedProject.ProjectCode}"/>
Вот проблема:
Второй элемент Binding в Multibinding (<Binding Path="SelectedProject.ProjectCode"/>
) будет обновляться и отображаться в текстовом блоке предварительного просмотра, как только текстовое поле выше потеряет фокус (идеально!), в то время как первый элемент Binding (<Binding Path="SelectedStudio.Code"/>
) никогда не отображается в TextBlock предварительного просмотра, когда я выбираю элемент из ComboBox.
Что мне не хватает и как это исправить?
Я думал, что это вопрос реализации OnPropertyChanged(string info)
для свойств WbStudio
, но это не сработало, и WbProject
тоже не реализовано, поэтому я подумал, что это не должно быть проблемой. Я также подумал, что это может быть связано со свойствами static
, но они оба статичны, и SelectedProject работает. И вы не реализуете методы OnPropertyChanged
для статических свойств таким же образом. Так что я подозреваю, что это связано с некоторой разницей между Combobox
и TextBox
?
WbStudio
объектов (код в сообщении), но дайте мне знать, если вам нужна дополнительная информация. - person Andrea Tassera   schedule 26.11.2020Mode=TwoWay
иUpdateSourceTrigger=PropertyChanged
в привязке SelectedItem не имеет смысла. Оба установлены по умолчанию. - person Clemens   schedule 26.11.2020Path="SelectedStudio.Code"
недопустимо для статического свойства. Посмотрите последний связанный исходный вопрос и выполните поиск в StackOverflow. Должно быть что-то вродеPath="(local:ViewModel.SelectedStudio).Code"
. Однако эти свойства не должны быть в первую очередь статичными. - person Clemens   schedule 26.11.2020<Binding Path="SelectedProject.ProjectCode"/>
, и это работает! Вот почему я подумал, что это может быть разница междуComboBox
иTextBox
. Можно ли снова открыть вопрос? Может кто готов помочь... - person Andrea Tassera   schedule 27.11.2020