Могу ли я связать UpdateSourceTrigger = PropertyChanged с другим свойством, чем с привязанным свойством? - PullRequest
0 голосов
/ 14 декабря 2018

Скажем, я привязываюсь к видимости элемента управления:

Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}}"

При этом он хорошо работает при первом запуске приложения, но когда изменяется определенный параметр в пределах NameToVisibilityConverter, который вызываетвидимость будет отличаться, но Name, с которым видимость должна была остаться, остается прежней, конвертер не запускается повторно.Я мог бы попробовать это:

Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged}"

Добавление UpdateSourceTrigger=PropertyChanged не поможет в этой ситуации, так как Binding Path=. то же самое и не вызовет преобразование значения для преобразования снова.

Как я могу изменить свойство UpdateSourceTrigger=PropertyChanged, чтобы оно срабатывало на свойство, отличное от Name (что я хочу добиться, это как свойство UpdateSourceProperty, отличное от текущей привязки):

Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged, UpdateSourceProperty={Binding Path=Count}"

Спасибо!Пожалуйста, дайте мне знать, если что-то нужно уточнить.Суть в том, что мне нужно преобразование valueConverter чаще, чем как часто менялось свойство привязки.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Как я могу изменить свойство U pdateSourceTrigger=PropertyChanged, чтобы оно срабатывало для свойства, отличного от Name (то, чего я хочу добиться, это как свойство UpdateSourceProperty, отличное от текущей привязки):

Преобразователь вызывается только при изменении свойства data-bound .Изменение значения UpdateSourceTrigger ничего не меняет.

Что вы можете сделать, это связать более чем одно свойство, используя MultiBinding и преобразователь с несколькими значениями, например:

<SomeControl.Visibility>
    <MultiBinding Converter="{StaticResource NameToVisibilityConverter}">
        <Binding Path="Name" />
        <Binding Path="SomeOtherPropertyThatShouldTriggerTheConverter" />
    </MultiBinding>
</SomeControl.Visibility>

Ваш класс преобразователя должен затем реализовать интерфейс IMultiValueConverter вместо интерфейса IValueConverter.

0 голосов
/ 14 декабря 2018

Во-первых, UpdateSourceTrigger не имеет ничего общего с нужным вам эффектом.Это для обновления источника (имя в вашем случае), когда свойство изменяется в вашем окне.Если вы хотите, чтобы свойство изменялось при смене источника, вы должны, во-первых, реализовать интерфейс INotifyPropertyChanged в своем классе модели.

class Model
{
    private string name;

    public string Name
    {
        get=>name;
        set
        {
            name = value;
            OnPropertyChanged(nameof(Name));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string prop = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
    }
}

Затем, если вы связываете свойство Name с каким-либо свойством элемента управления в вашем окне, каждыйесли это свойство установлено, оно вызовет событие PropertyChanded для свойства Name, и привязка будет обновлена.

Если свойство зависит от нескольких свойств в модели и должно быть обновлено, когда любое изИзменены свойства модели, наиболее логичным является использование MultiBinding с IMultiValueConverter.Но если по какой-то причине вы не хотите или не можете этого сделать, вы можете запускать

OnPropertyChanged(nameof(Name))

каждый раз, когда вы меняете не только имя, но и другие свойства, от которых зависит ваш контроль.Тогда привязка будет обновлена, как если бы вы изменили имя.

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