Есть способ сделать это в WiX.Вам просто нужно создать собственное измененное событие.
Мы сравниваем наше условие DoAction с другим свойством, которое будет содержать предыдущее состояние Combobox - VIRTUALWEBSITEOLD
Выполнить пользовательское действие в ComboBox, когда оно устарелоне равно new:
<Control Id="WebSite" Type="ComboBox" Width="180" Height="18" X="120" Y="48" ComboList="no" Property="VIRTUALWEBSITE">
<Publish Event="DoAction" Value="LansaInitVirtualFolders"><![CDATA[VIRTUALWEBSITE <> VIRTUALWEBSITEOLD]]></Publish>
</Control>
Затем пользовательское действие выполняет то же сравнение, что и DoAction (вероятно, не требуется), а затем сохраняет значение Combobox в свойстве OLD.
Tstring wszWebsite = ReadProperty( _T( "VIRTUALWEBSITE") );
Tstring wszWebsiteOld = ReadProperty( _T ( "VIRTUALWEBSITEOLD" ) );
// If unchanged ignore request
if ( wszWebsite == wszWebsiteOld ) return true ;
[Do Some stuff]
// Set the saved state of the combobox so we don't get called again until it changes
if ( nResult == ERROR_SUCCESS || nResult == ERROR_NO_MORE_ITEMS)
{
WriteProperty( _T("VIRTUALWEBSITEOLD" ), wszWebsite.c_str () );
}
(Примечание. Также необходимо использовать шаблон Twin Dialog, если обновляется, скажем, элемент управления listbox. Если ваш элемент управления не обновляется, но Next и Back ОБНОВЛЯЕТ его, то шаблон Twin Dialog обеспечит его обновление)